DataColumn.Expression 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
행을 필터링하거나 열의 값을 계산하거나 집계 열을 만드는 데 사용되는 식을 가져오거나 설정합니다.
public:
property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
public string Expression { get; set; }
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
public string Expression { get; set; }
member this.Expression : string with get, set
[<System.Data.DataSysDescription("DataColumnExpressionDescr")>]
member this.Expression : string with get, set
Public Property Expression As String
속성 값
열의 값을 계산하거나 집계 열을 만드는 식입니다. 식의 반환 형식은 열의 DataType에 의해 결정됩니다.
- 특성
예외
AutoIncrement 또는 Unique 속성이 true로 설정되어 있는 경우
CONVERT 함수를 사용하는 동안 식은 문자열로 계산되지만 문자열에 형식 매개 변수로 변환될 수 있는 표현이 포함되지 않은 경우
CONVERT 함수를 사용하는 동안 요청된 캐스팅을 수행할 수 없는 경우. 가능한 캐스팅에 대한 자세한 내용은 다음 섹션에서 변환 함수를 참조하십시오.
SUBSTRING 함수를 사용하는 동안 시작 인수가 범위를 벗어난 경우
-또는-
SUBSTRING 함수를 사용하는 동안 길이 인수가 범위를 벗어난 경우
예제
다음 예제에서는 에 세 개의 DataTable열을 만듭니다. 두 번째 열과 세 번째 열에는 식이 포함됩니다. 두 번째는 가변 세율을 사용하여 세금을 계산하고, 세 번째는 계산 결과를 첫 번째 열의 값에 추가합니다. 결과 테이블이 컨트롤에 DataGrid 표시됩니다.
private void CalcColumns()
{
DataTable table = new DataTable ();
// Create the first column.
DataColumn priceColumn = new DataColumn();
priceColumn.DataType = System.Type.GetType("System.Decimal");
priceColumn.ColumnName = "price";
priceColumn.DefaultValue = 50;
// Create the second, calculated, column.
DataColumn taxColumn = new DataColumn();
taxColumn.DataType = System.Type.GetType("System.Decimal");
taxColumn.ColumnName = "tax";
taxColumn.Expression = "price * 0.0862";
// Create third column.
DataColumn totalColumn = new DataColumn();
totalColumn.DataType = System.Type.GetType("System.Decimal");
totalColumn.ColumnName = "total";
totalColumn.Expression = "price + tax";
// Add columns to DataTable.
table.Columns.Add(priceColumn);
table.Columns.Add(taxColumn);
table.Columns.Add(totalColumn);
DataRow row = table.NewRow();
table.Rows.Add(row);
DataView view = new DataView(table);
dataGrid1.DataSource = view;
}
Private Sub CalcColumns()
Dim rate As Single = .0862
Dim table As New DataTable()
' Create the first column.
Dim priceColumn As New DataColumn()
With priceColumn
.DataType = System.Type.GetType("System.Decimal")
.ColumnName = "price"
.DefaultValue = 50
End With
' Create the second, calculated, column.
Dim taxColumn As New DataColumn()
With taxColumn
.DataType = System.Type.GetType("System.Decimal")
.ColumnName = "tax"
.Expression = "price * 0.0862"
End With
' Create third column
Dim totalColumn As New DataColumn()
With totalColumn
.DataType = System.Type.GetType("System.Decimal")
.ColumnName = "total"
.Expression = "price + tax"
End With
' Add columns to DataTable
With table.Columns
.Add(priceColumn)
.Add(taxColumn)
.Add(totalColumn)
End With
Dim row As DataRow= table.NewRow
table.Rows.Add(row)
Dim view As New DataView
view.Table = table
DataGrid1.DataSource = view
End Sub
설명
이 속성의 Expression 한 가지 사용은 계산 열을 만드는 것입니다. 예를 들어 세금 값을 계산하기 위해 단가에 특정 지역의 세율을 곱합니다. 세율은 지역마다 다르므로 단일 세율을 열에 두는 것은 불가능합니다. 대신 다음 섹션의 Expression Visual Basic 코드와 같이 속성을 사용하여 값을 계산합니다.
DataSet1.Tables("Products"). Columns("tax"). Expression = "UnitPrice * 0.086"
두 번째 사용은 집계 열을 만드는 것입니다. 계산된 값과 마찬가지로 집계는 해당 행의 전체 집합을 기반으로 작업을 수행합니다 DataTable. 간단한 예는 집합에서 반환되는 행 수를 계산하는 것입니다. 이 메서드는 이 Visual Basic 코드와 같이 특정 영업 사원이 완료한 트랜잭션 수를 계산하는 데 사용합니다.
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
식 구문
식을 만들 때 속성을 사용하여 ColumnName 열을 참조합니다. 예를 들어 한 열에 ColumnName 대한 열이 "UnitPrice"이고 다른 "Quantity"인 경우 식은 다음과 같습니다.
"UnitPrice * Quantity"
참고
식에서 열을 사용하는 경우 식은 해당 열에 종속되어 있다고 합니다. 종속 열의 이름을 바꾸거나 제거하면 예외가 throw되지 않습니다. 이제 손상된 식 열에 액세스할 때 예외가 throw됩니다.
필터에 대한 식을 만들 때 문자열을 작은따옴표로 묶습니다.
"LastName = 'Jones'"
열 이름에 영숫자가 아닌 문자가 포함되거나 다음 예약어 중 하나와 숫자 또는 일치(대/소문자 구분 안 함)로 시작하는 경우 다음 단락에 설명된 대로 특수한 처리가 필요합니다.
and
시간
자식
거짓
In(다음 안에)
Is
Like
Not
Null
또는
Parent
True
열 이름이 위의 조건 중 하나를 충족하는 경우 대괄호 또는 "'"(그레이브 악센트) 따옴표로 래핑해야 합니다. 예를 들어 식에서 "Column#"이라는 열을 사용하려면 "[Column#]" 중 하나를 작성합니다.
Total * [Column#]
또는 "`Column#'":
Total * `Column#'
열 이름이 대괄호로 묶인 경우 해당 열의 모든 ']' 및 '\' 문자(다른 문자는 아님)를 백슬래시(""\) 문자 앞에 추가하여 이스케이프해야 합니다. 열 이름이 그레이브 악센트 문자로 묶이면 그 안에 묘한 악센트 문자가 포함되어서는 안됩니다. 예를 들어 "Column[]\"이라는 열이 작성됩니다.
Total * [Column[\]\\]
또는
Total * `Column[]\`
User-Defined 값
식 내에서 사용자 정의 값을 사용하여 열 값과 비교할 수 있습니다. 문자열 값은 작은따옴표 안에 묶어야 합니다(문자열 값의 각 작은따옴표 문자는 다른 작은따옴표 앞에 추가하여 이스케이프해야 합니다). 날짜 값은 데이터 공급자를 기준으로 파운드 기호(#) 또는 작은따옴표(') 내에 묶어야 합니다. 숫자 값에는 소수점과 과학적 표기법이 허용됩니다. 예를 들면 다음과 같습니다.
"FirstName = 'John'"
"가격 <= 50.00"
"생년월일 < #1/31/82#"
열거형 값을 포함하는 열의 경우 값을 정수 데이터 형식으로 캐스팅합니다. 예를 들면 다음과 같습니다.
"EnumColumn = 5"
리터럴 식 구문 분석
모든 리터럴 식은 고정 문화권 로캘로 표현되어야 합니다. 리터럴 식을 구문 분석하고 변환하는 경우 DataSet 항상 현재 문화권이 아닌 고정 문화권을 사용합니다.
문자열 리터럴은 값을 둘러싼 큰따옴표가 있을 때 식별됩니다. 예를 들면 다음과 같습니다.
'존'
Boolean 리터럴은 true이고 false입니다. 식에서 따옴표가 붙지 않습니다.
Integer리터럴 [+-]? [0-9]+는 또는 System.Int64 System.Double.System.Int32 System.Double 는 숫자가 얼마나 큰지에 따라 정밀도를 잃을 수 있습니다. 예를 들어 리터럴의 숫자가 2147483650 DataSet 경우 먼저 숫자를 구 Int32문 분석하려고 합니다. 숫자가 너무 커서 성공하지 않습니다. 이 경우 DataSet 숫자를 성공하는 숫자로 Int64구문 분석합니다. 리터럴이 Int64 DataSet 의 최대값보다 큰 숫자인 경우 리터럴을 사용하여 Double구문 분석합니다.
4.42372E-30과 같은 과학적 표기법을 사용하는 실제 리터럴은 을 사용하여 System.Double구문 분석됩니다.
과학적 표기법이 없지만 소수점이 있는 실제 리터럴은 로 System.Decimal처리됩니다. 이 숫자가 지원되는 System.Decimal최대값 또는 최소값을 초과하면 구문 분석됩니다 System.Double. 예를 들면 다음과 같습니다.
142526.144524는 .Decimal
345262.78036719560925667은 로 Double처리됩니다.
연산자
부울 AND, OR 및 NOT 연산자를 사용하여 연결이 허용됩니다. 괄호를 사용하여 절을 그룹화하고 우선 순위를 적용할 수 있습니다. AND 연산자는 다른 연산자보다 우선합니다. 예를 들면 다음과 같습니다.
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
비교 식을 만들 때 다음 연산자가 허용됩니다.
<
>
<=
>=
<>
=
IN
LIKE
식에서도 다음과 같은 산술 연산자가 지원됩니다.
+ (추가)
- (빼기)
* (곱하기)
/(나누기)
% (모듈러스)
문자열 연산자
문자열을 연결하려면 + 문자를 사용합니다. 클래스의 CaseSensitive 속성 DataSet 값은 문자열 비교가 대/소문자를 구분하는지 여부를 결정합니다. 그러나 클래스의 속성을 사용하여 해당 값을 재정의할 CaseSensitive DataTable 수 있습니다.
와일드카드 문자
*와 %는 모두 LIKE 비교에서 와일드카드 문자에 대해 서로 바꿔 사용할 수 있습니다. LIKE 절의 문자열에 * 또는 %가 포함된 경우 해당 문자는 대괄호([])로 묶어야 합니다. 대괄호가 절에 있는 경우 각 대괄호 문자를 대괄호로 묶어야 합니다(예: [[] 또는 []]). 와일드카드는 패턴의 시작과 끝에서 또는 패턴의 끝이나 패턴의 시작 부분에 허용됩니다. 예를 들면 다음과 같습니다.
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
와일드카드 문자는 문자열 중간에 사용할 수 없습니다. 예를 들어 'te*xt'는 허용되지 않습니다.
부모/자식 관계 참조
열 이름을 Parent앞에 추가하여 식에서 부모 테이블을 참조할 수 있습니다. 예를 들어 부모 Parent.Price 테이블의 열 Price인 를 참조합니다.
자식에 부모 행이 두 개 이상 있는 경우 Parent(RelationName)를 사용합니다. Columnname. 예를 들어 Parent(RelationName)입니다. Price는 관계를 통해 Price라는 상위 테이블의 열을 참조합니다.
열 이름을 Child앞에 추가하여 식에서 자식 테이블의 열을 참조할 수 있습니다. 그러나 자식 관계가 여러 행을 반환할 수 있으므로 집계 함수에 자식 열에 대한 참조를 포함해야 합니다. 예를 들어 자 Sum(Child.Price) 식 테이블에 명명된 Price 열의 합계를 반환합니다.
테이블에 둘 이상의 자식이 있는 경우 구문은 다음과 Child(RelationName)같습니다. 예를 들어 테이블에 이름이 두 Customers 개의 자식 테이블이 있고 Orders개체 이름이 DataRelation 지정된 Customers2Orders경우 참조는 다음과 같습니다.
Avg(Child(Customers2Orders). 수량)
집계
지원되는 집계 형식은 다음과 같습니다.
합계(합계)
평균(평균)
최소(최소)
최대(최대)
Count(개수)
StDev(통계 표준 편차)
Var(통계 분산).
집계는 일반적으로 관계를 따라 수행됩니다. 앞에서 설명한 부모/자식 관계 참조에 설명된 대로 앞에서 나열된 함수 중 하나와 자식 테이블 열을 사용하여 집계 식을 만듭니다. 예를 들면 다음과 같습니다.
Avg(Child.Price)
Avg(Child(Orders2Details). 가격)
집계는 단일 테이블에서도 수행할 수 있습니다. 예를 들어 "Price"라는 열에 그림 요약을 만들려면 다음을 수행합니다.
Sum(Price)
참고
단일 테이블을 사용하여 집계를 만드는 경우 그룹별 기능이 없습니다. 대신 모든 행은 열에 동일한 값을 표시합니다.
테이블에 행이 없으면 집계 함수가 반환 null됩니다.
데이터 형식은 항상 열의 속성을 검사하여 DataType 확인할 수 있습니다. 다음 섹션에 표시된 Convert 함수를 사용하여 데이터 형식을 변환할 수도 있습니다.
집계는 단일 열에만 적용할 수 있으며 집계 내에서 다른 식을 사용할 수 없습니다.
Functions
다음 함수도 지원됩니다.
CONVERT
| Description | 특정 식을 지정된 .NET Framework 형식으로 변환합니다. |
| Syntax | Convert(expression, type) |
| 인수 | expression -- 변환할 식입니다.type 값을 변환할 -- .NET 형식입니다. |
예: myDataColumn.Expression="Convert(total, 'System.Int32')"
모든 변환은 다음과 같은 예외를 제외하고 유효합니다. Boolean , ,SByte, Int16, UInt64``Int32``String Int64``UInt32``UInt16, 자체만 강제 Byte변환할 수 있습니다. Char는 그 자체만으로 강제 Int32``UInt32``String변환할 수 있습니다. DateTime 는 그 자체로만 강제 변환 String 될 수 있습니다. TimeSpan 는 그 자체로만 강제 변환 String 될 수 있습니다.
LEN
| Description | 문자열의 길이를 가져옵니다. |
| Syntax | LEN(expression) |
| 인수 | expression -- 평가할 문자열입니다. |
예: myDataColumn.Expression="Len(ItemName)"
ISNULL
| Description | 식을 검사하고 선택된 식 또는 대체 값을 반환합니다. |
| Syntax | ISNULL(expression, replacementvalue) |
| 인수 | expression -- 확인할 식입니다.replacementvalue-- 식이 null``replacementvalue 면 반환됩니다. |
예: myDataColumn.Expression="IsNull(price, -1)"
IIF
| Description | 논리 식의 결과에 따라 두 값 중 하나를 가져옵니다. |
| Syntax | IIF(expr, truepart, falsepart) |
| 인수 | expr -- 평가할 식입니다.truepart -- 식이 true이면 반환할 값입니다.falsepart -- 식이 false이면 반환할 값입니다. |
예: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
| Description | \r, \n, \t, '와 같은 모든 선행 및 후행 빈 문자를 제거합니다. |
| Syntax | TRIM(expression) |
| 인수 | expression -- 트리밍할 식입니다. |
SUBSTRING
| Description | 문자열의 지정된 지점에서 시작하여 지정된 길이의 하위 문자열을 가져옵니다. |
| Syntax | SUBSTRING(expression, start, length) |
| 인수 | expression -- 부분 문자열의 원본 문자열입니다.start -- 부분 문자열이 시작되는 위치를 지정하는 정수입니다.length -- 부분 문자열의 길이를 지정하는 정수입니다. |
예: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
참고
null 값 또는 빈 문자열을 할당하여 속성을 다시 설정할 Expression 수 있습니다. 식 열에 기본값이 설정된 경우 속성이 다시 설정된 후 이전에 채워진 모든 행에 기본값이 Expression 할당됩니다.