Null 許容演算子は、2 項算術演算子または比較演算子であり、一方または両側で null 許容算術型を操作します。 Null 許容型は、実際の値の代わりに null を許可するデータベースなどのソースからのデータを操作するときに発生します。 Null 許容演算子は、クエリ式で使用されます。 算術演算子と比較用の null 許容演算子に加えて、変換演算子を使用して null 許容型間の変換を行うことができます。 また、特定のクエリ演算子の null 許容バージョンもあります。
注
Null 許容演算子は、通常、 クエリ式でのみ使用されます。 クエリ式を使用しない場合は、これらの演算子を知ったり使用したりする必要はありません。
Null 許容演算子の表
次の表に、F# でサポートされている null 許容演算子を示します。
| 左側に Null 許容 | 右側の Null 許容 | 両側 null 許容 |
|---|---|---|
| ?>= | >=? | ?>=? |
| ?> | >? | ?>? |
| ?<= | <=? | ?<=? |
| ?< | <? | ?<? |
| ?= | =? | ?=? |
| ?<> | <>? | ?<>? |
| ?+ | +? | ?+? |
| ?- | -? | ?-? |
| ?* | *? | ?*? |
| ?/ | /? | ?/? |
| ?% | %? | ?%? |
注釈
null 許容演算子は、名前空間 FSharp.Linq の NullableOperators モジュールに含まれています。 null 許容データの型は System.Nullable<'T>。
クエリ式では、値の代わりに null を許容するデータ ソースからデータを選択すると、null 許容型が発生します。 SQL Server データベースでは、テーブル内の各データ列に、null が許可されるかどうかを示す属性があります。 null が許可されている場合、データベースから返されるデータには、 int、 floatなどのプリミティブ データ型で表すことができない null を含めることができます。 したがって、データはintではなくSystem.Nullable<int>として返され、floatではなくSystem.Nullable<float>されます。 実際の値は、Value プロパティを使用してSystem.Nullable<'T> オブジェクトから取得できます。また、System.Nullable<'T> オブジェクトが値を持っているかどうかを判断するには、HasValue メソッドを呼び出します。 もう 1 つの便利な方法は、 System.Nullable<'T>.GetValueOrDefault メソッドです。これにより、適切な型の値または既定値を取得できます。 既定値は、0、0.0、 falseなど、何らかの形式の "ゼロ" 値です。
null 許容型は、 int や floatなどの通常の変換演算子を使用して、null 非許容プリミティブ型に変換できます。 null 許容型の変換演算子を使用して、ある null 許容型から別の null 許容型に変換することもできます。 適切な変換演算子の名前は標準の演算子と同じですが、FSharp.Linq 名前空間の Null 許容モジュールという別のモジュールに含まれています。 通常、クエリ式を使用するときは、この名前空間を開きます。 その場合は、次のコードに示すように、適切な変換演算子にプレフィックス Nullable. を追加することで、null 許容変換演算子を使用できます。
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 になります。
sumByNullableなどの null 許容データ フィールドのクエリ演算子も、クエリ式で使用するために存在します。 null 非許容型のクエリ演算子は null 許容型と型互換性がないため、null 許容データ値を使用する場合は、適切なクエリ演算子の null 許容バージョンを使用する必要があります。 詳細については、「 クエリ式」を参照してください。
次の例は、F# クエリ式で null 許容演算子を使用する方法を示しています。 最初のクエリは、null 許容演算子なしでクエリを記述する方法を示しています。2 番目のクエリは、null 許容演算子を使用する同等のクエリを示しています。 このサンプル コードを使用するようにデータベースを設定する方法など、完全なコンテキストについては、「 チュートリアル: 型プロバイダーを使用した 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}")
こちらも参照ください
.NET