Operator yang Dapat Diubah ke Null dalam Kueri
Operator yang dapat diubah ke null adalah biner aritmatika atau operator perbandingan yang bekerja dengan jenis aritmatika yang dapat diubah ke null di satu atau kedua sisi. Jenis yang dapat diubah ke null akan muncul ketika Anda bekerja dengan data dari sumber seperti database yang mengizinkan null menempati nilai aktual. Operator yang dapat diubah ke null digunakan dalam ekspresi kueri. Selain operator yang dapat diubah ke null untuk aritmatika dan perbandingan, operator konversi dapat digunakan untuk mengkonversi antara jenis yang dapat diubah ke null. Ada juga versi yang dapat diubah ke null dari operator query tertentu.
Catatan
Operator yang dapat diubah ke null umumnya hanya digunakan dalam ekspresi kueri. Jika tidak menggunakan ekspresi kueri, Anda tidak perlu mengetahui atau menggunakan operator ini.
Tabel Operator yang Dapat Diubah ke Null
Tabel berikut mencantumkan operator yang dapat diubah ke null yang didukung di F#.
Di sebelah kiri dapat diubah ke null | Di sebelah kanan dapat diubah ke null | Kedua sisi dapat diubah ke null |
---|---|---|
?>= | >=? | ?>=? |
?> | >? | ?>? |
?<= | <=? | ?<=? |
?< | <? | ?<? |
?= | =? | ?=? |
?<> | <>? | ?<>? |
?+ | +? | ?+? |
?- | -? | ?-? |
?* | *? | ?*? |
?/ | /? | ?/? |
?% | %? | ?%? |
Keterangan
Operator yang dapat diubah ke null disertakan dalam modul NullableOperators di namespace layanan FSharp.Linq. Jenis untuk data yang dapat diubah ke null adalah System.Nullable<'T>
.
Dalam ekspresi kueri, jenis yang dapat diubah ke null akan muncul saat memilih data dari sumber data yang mengizinkan null, bukan nilai. Dalam database SQL Server, setiap kolom data dalam tabel memiliki atribut yang menunjukkan apakah null diizinkan. Jika null diizinkan, data yang dimunculkan dari database dapat berisi null yang tidak dapat diwakili oleh jenis data primitif seperti int
, float
, dan sebagainya. Oleh karena itu, data dimunculkan sebagai System.Nullable<int>
bukan int
, dan System.Nullable<float>
bukan float
. Nilai aktual dapat diperoleh dari objek System.Nullable<'T>
dengan menggunakan properti Value
, dan Anda dapat menentukan apakah objek System.Nullable<'T>
memiliki nilai dengan memanggil metode HasValue
. Metode lain yang berguna adalah metode System.Nullable<'T>.GetValueOrDefault
, yang memungkinkan Anda untuk mendapatkan nilai atau nilai default dari jenis yang sesuai. Nilai default adalah beberapa bentuk nilai "nol", seperti 0, 0,0, atau false
.
Jenis yang dapat diubah ke null dapat dikonversi ke jenis primitif yang tidak dapat diubah ke null menggunakan operator konversi biasa seperti int
atau float
. Dimungkinkan juga untuk mengonversi dari satu jenis dapat diubah ke null ke jenis lainnya dengan menggunakan operator konversi untuk jenis yang dapat diubah ke null. Operator konversi yang sesuai memiliki nama yang sama dengan operator yang standar tetapi berada dalam modul terpisah, yaitu modul Yang dapat diubah ke null di namespace layanan FSharp.Linq. Biasanya, Anda membuka namespace layanan ini saat bekerja dengan ekspresi kueri. Dalam hal ini, Anda dapat menggunakan operator konversi yang dapat diubah ke null dengan menambahkan awalan Nullable.
ke operator konversi yang sesuai, seperti yang ditunjukkan dalam kode berikut.
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}"
Outputnya adalah 10.000000
.
Operator kueri pada bidang data yang dapat diubah ke null, seperti sumByNullable
, juga ada untuk digunakan dalam ekspresi kueri. Operator kueri untuk jenis yang tidak dapat diubah ke null bersifat tidak kompatibel dengan jenis yang dapat diubah ke null. Jadi Anda harus menggunakan versi yang dapat diubah ke null dari operator kueri yang sesuai saat Anda bekerja dengan nilai data yang dapat diubah ke null. Untuk informasi selengkapnya, lihat Ekspresi Kueri.
Contoh berikut menunjukkan penggunaan operator yang dapat diubah ke null dalam ekspresi kueri F#. Kueri pertama menunjukkan bagaimana Anda akan menulis kueri tanpa operator yang dapat diubah ke null; kueri kedua menampilkan kueri setara yang menggunakan operator yang dapat diubah ke null. Untuk konteks selengkapnya, termasuk cara menyiapkan database untuk menggunakan kode sampel ini, lihat Panduan: Mengakses SQL Database dengan Menggunakan Penyedia Jenis.
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}")