다음을 통해 공유


쿼리의 Nullable 연산자

Nullable 연산자는 한쪽 또는 양쪽에서 nullable 산술 형식을 사용하는 이진 산술 연산자 또는 비교 연산자입니다. Null 허용 형식은 실제 값 대신 null을 허용하는 데이터베이스와 같은 원본의 데이터로 작업할 때 발생합니다. Nullable 연산자는 쿼리 식에 사용됩니다. 산술 및 비교를 위한 nullable 연산자 외에도 변환 연산자를 사용하여 nullable 형식 간에 변환할 수 있습니다. 특정 쿼리 연산자의 null 허용 버전도 있습니다.

참고 항목

Nullable 연산자는 일반적으로 쿼리 식에서만 사용됩니다. 쿼리 식을 사용하지 않는 경우 이러한 연산자를 알거나 사용할 필요가 없습니다.

Nullable 연산자의 테이블

다음 표에서는 F#에서 지원되는 nullable 연산자를 나열합니다.

왼쪽에 Nullable 오른쪽에 Nullable 양쪽 모두 nullable
?>= >=? ?>=?
?> >? ?>?
?<= <=? ?<=?
?< <? ?<?
?= =? ?=?
?<> <>? ?<>?
?+ +? ?+?
?- -? ?-?
?* *? ?*?
?/ /? ?/?
?% %? ?%?

설명

nullable 연산자는 네임스페이스 FSharp.Linq의 NullableOperators 모듈에 포함됩니다. nullable 데이터의 형식은 .입니다 System.Nullable<'T>.

쿼리 식에서 null 허용 형식은 값 대신 null을 허용하는 데이터 원본에서 데이터를 선택할 때 발생합니다. SQL Server 데이터베이스에서 테이블의 각 데이터 열에는 null 허용 여부를 나타내는 특성이 있습니다. null이 허용되는 경우 데이터베이스에서 반환된 데이터에는 기본 데이터 형식(예: 등)으로 int나타낼 수 없는 null이 float포함될 수 있습니다. 따라서 데이터는 대신 , System.Nullable<float>float대신에 반환 System.Nullable<int>int됩니다. 속성을 사용하여 개체에서 System.Nullable<'T> 실제 값을 가져올 수 있으며 메서드를 System.Nullable<'T> 호출 HasValue 하여 개체에 값이 있는지 확인할 수 Value 있습니다. 또 다른 유용한 방법은 적절한 형식의 System.Nullable<'T>.GetValueOrDefault 값 또는 기본값을 가져올 수 있는 메서드입니다. 기본값은 0, 0.0 또는 false.

Nullable 형식은 같은 일반적인 변환 연산자를 사용하여 nullable이 아닌 기본 형식으로 intfloat변환될 수 있습니다. nullable 형식에 대한 변환 연산자를 사용하여 nullable 형식에서 다른 nullable 형식으로 변환할 수도 있습니다. 적절한 변환 연산자는 표준 연산자의 이름과 같지만 FSharp.Linq 네임스페이스의 Nullable 모듈인 별도의 모듈에 있습니다. 일반적으로 쿼리 식을 사용할 때 이 네임스페이스를 엽니다. 이 경우 다음 코드와 같이 접두 Nullable. 사를 적절한 변환 연산자에 추가하여 nullable 변환 연산자를 사용할 수 있습니다.

open Microsoft.FSharp.Linq

let nullableInt = new System.Nullable<int>(10)

// Use the Nullable.float conversion operator to convert from one nullable type to another nullable type.
let nullableFloat = Nullable.float nullableInt

// Use the regular non-nullable float operator to convert to a non-nullable float.
printfn $"%f{float nullableFloat}"

10.000000가 출력됩니다.

nullable 데이터 필드(예: sumByNullable)의 쿼리 연산자도 쿼리 식에 사용할 수 있습니다. nullable이 아닌 형식에 대한 쿼리 연산자는 nullable 형식과 형식 호환되지 않으므로 nullable 데이터 값을 사용할 때 적절한 쿼리 연산자의 nullable 버전을 사용해야 합니다. 자세한 내용은 쿼리 식을 참조 하세요.

다음 예제에서는 F# 쿼리 식에서 nullable 연산자를 사용하는 방법을 보여 있습니다. 첫 번째 쿼리는 nullable 연산자 없이 쿼리를 작성하는 방법을 보여줍니다. 두 번째 쿼리는 nullable 연산자를 사용하는 동등한 쿼리를 보여줍니다. 이 샘플 코드를 사용하도록 데이터베이스를 설정하는 방법을 비롯한 전체 컨텍스트는 연습: 형식 공급자를 사용하여 SQL Database에 액세스하는 방법을 참조 하세요.

open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq

[<Generate>]
type dbSchema = SqlDataConnection<"Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;">

let db = dbSchema.GetDataContext()

query {
    for row in db.Table2 do
    where (row.TestData1.HasValue && row.TestData1.Value > 2)
    select row
} |> Seq.iter (fun row -> printfn $"%d{row.TestData1.Value} %s{row.Name}")

query {
    for row in db.Table2 do
    // Use a nullable operator ?>
    where (row.TestData1 ?> 2)
    select row
} |> Seq.iter (fun row -> printfn "%d{row.TestData1.GetValueOrDefault()} %s{row.Name}")

참고 항목