NULL olabilecek Operators (F#)
Bir ya da iki yüze nullable aritmetik türleriyle çalýþmak ikili aritmetik ve karşılaştırma işleçleri Nullable işleçlerdir. Sık sık, gerçek değerleri yerine boş değerlere izin veritabanları gibi kaynaklardan veri ile çalışırken null yapılabilir türler ortaya çıkar. NULL olabilecek işleçleri sorgu ifadelerde sıklıkla kullanılır. Aritmetik ve karşılaştırma için null işleçlere ek olarak, null yapılabilir türler arasında dönüştürmek için dönüştürme işleçleri kullanılabilir. NULL olabilecek belirli sorgu işleçleri sürümleri de vardır.
NULL olabilecek işleçler tablosu
F# dilinin desteklenen nullable işleçler aşağıdaki tabloda listelenmektedir.
Sol taraftaki Nullable |
Sağdaki Nullable |
Her iki null |
Notlar
NULL olabilecek işleçleri dahil NullableOperators ad alanında modülü Microsoft.FSharp.Linq. Null veri türü Nullable<T>.
Sorgu ifadelerde değerler yerine boş değerlere izin veren bir veri kaynağından alınan verileri seçme null yapılabilir türler artmaktadır. Bir sql Server veritabanında, bir tablodaki her veri sütunu null değerlere izin verilip verilmeyeceğini gösterir bir özniteliği vardır. Boş değerlere izin verilirse, veritabanından döndürülen verileri temel veri türüne göre gibi gösterilemez boş değerlere içerebilir int, floatve benzeri. Bu nedenle, veri olarak döndürülen bir System.Nullable<int> yerine int, ve System.Nullable<float> yerine float. Gerçek değeri alanından elde edilebilir bir Nullable<T> kullanarak nesne Value özelliği ve belirleyebilir, bir Nullable<T> nesnesini çağırarak bir değere sahip HasValue yöntemi. Başka yararlı yöntemdir GetValueOrDefault veya uygun türü varsayılan değerinin Al olanak sağlayan yöntem. Varsayılan değer "sıfır" değeri 0 gibi bazı biçimidir 0.0, ya da false.
NULL olabilecek türleri her zamanki dönüştürme işleçleri kullanarak yapılamayan İlkel türler için dönüştürülmüş int veya float. Bir null olabilecek türden nullable türleri için dönüştürme işleçleri kullanarak null olabilecek başka bir türe dönüştürmek mümkündür. Uygun dönüştürme işleçleri olanlara standart olarak aynı ada sahip, ancak ayrı bir modülde oldukları Boş'U modülünde Microsoft.FSharp.Linq ad. Tipik olarak, bu ad sorgu ifadeleri ile çalışırken açın. Bu durumda, önek ekleyerek null dönüştürme işleçleri kullanabilirsiniz Nullable. için aşağıdaki kodda gösterildiği gibi uygun Dönüþtürme iþleci.
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)
Çıkış 10.000000.
Null veri alanları işleçlerini gibi sorgu sumByNullable, sorgu ifadeleri kullanmak için de mevcut. Null veri değerleri ile çalışırken uygun sorgu işlecini nullable sürümünü kullanmalısınız yapılamayan türleri için sorgu işleçleri nullable türleriyle türü ile uyumlu değildir. Daha fazla bilgi için bkz. Sorgu ifadelerini (F#).
Aşağıdaki örnek, bir F# sorgu ifade null işleçleri kullanımını göstermektedir. İlk sorguyu sorgu null işlecini olmadan nasıl yazarsınız gösterir; İkinci sorguyu null işlecini kullanan bir eşdeğer sorgu gösterir. Bu örnek kodu kullanmak için veritabanı ayarlamak nasıl da dahil olmak üzere tüm içerik için bkz: İzlenecek yol: tipi sağlayıcıları (F#) kullanarak bir sql veritabanına erişme.
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 %s" row.TestData1.Value 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 %s" (row.TestData1.GetValueOrDefault()) row.Name)