Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nullable-Operatoren sind binäre arithmetische operatoren oder Vergleichsoperatoren, die mit nullablen arithmetischen Typen auf einer oder beiden Seiten arbeiten. Nullable-Typen treten auf, wenn Sie mit Daten aus Quellen arbeiten, z. B. Datenbanken, die Nullwerte anstelle tatsächlicher Werte zulassen. Nullable-Operatoren werden in Abfrageausdrücken verwendet. Neben nullablen Operatoren für Arithmetik und Vergleich können Konvertierungsoperatoren verwendet werden, um zwischen nullfähigen Typen zu konvertieren. Es gibt auch nullable Versionen bestimmter Abfrageoperatoren.
Hinweis
Nullable-Operatoren werden in der Regel nur in Abfrageausdrücken verwendet. Wenn Sie keine Abfrageausdrücke verwenden, müssen Sie diese Operatoren nicht kennen oder verwenden.
Tabelle mit nullablen Operatoren
In der folgenden Tabelle sind nullable Operatoren aufgeführt, die in F# unterstützt werden.
| Nullwerte links | Nullwerte rechts | Beide Seiten nullfähig |
|---|---|---|
| ?>= | >=? | ?>=? |
| ?> | >? | ?>? |
| ?<= | <=? | ?<=? |
| ?< | <? | ?<? |
| ?= | =? | ?=? |
| ?<> | <>? | ?<>? |
| ?+ | +? | ?+? |
| ?- | -? | ?-? |
| ?* | *? | ?*? |
| ?/ | /? | ?/? |
| ?% | %? | ?%? |
Bemerkungen
Die nullablen Operatoren sind im NullableOperators-Modul im Namespace FSharp.Linq enthalten. Der Typ für nullwerte Daten ist System.Nullable<'T>.
In Abfrageausdrücken treten nullable Typen auf, wenn Daten aus einer Datenquelle ausgewählt werden, die Nullen anstelle von Werten zulässt. In einer SQL Server-Datenbank verfügt jede Datenspalte in einer Tabelle über ein Attribut, das angibt, ob Nullen zulässig sind. Wenn Nullen zulässig sind, können die aus der Datenbank zurückgegebenen Daten Nullen enthalten, die nicht durch einen primitiven Datentyp wie int, floatusw. dargestellt werden können. Daher werden die Daten anstelle System.Nullable<int> von , und System.Nullable<float> anstelle von floatint. Der tatsächliche Wert kann mithilfe der Value Eigenschaft aus einem System.Nullable<'T> Objekt abgerufen werden, und Sie können ermitteln, ob ein System.Nullable<'T> Objekt einen Wert hat, indem Sie die HasValue Methode aufrufen. Eine weitere nützliche Methode ist die Methode, mit der System.Nullable<'T>.GetValueOrDefault Sie den Wert oder einen Standardwert des entsprechenden Typs abrufen können. Der Standardwert ist eine Form von "Null"-Wert, z. B. 0, 0,0 oder false.
Nullable-Typen können mithilfe der üblichen Konvertierungsoperatoren wie int oder float. Es ist auch möglich, mithilfe der Konvertierungsoperatoren für nullable Typen einen nullablen Typ in einen anderen nullablen Typ zu konvertieren. Die entsprechenden Konvertierungsoperatoren haben denselben Namen wie die Standardoperatoren, aber sie befinden sich in einem separaten Modul, dem Nullable-Modul im FSharp.Linq-Namespace . Normalerweise öffnen Sie diesen Namespace beim Arbeiten mit Abfrageausdrücken. In diesem Fall können Sie die nullablen Konvertierungsoperatoren verwenden, indem Sie das Präfix Nullable. zum entsprechenden Konvertierungsoperator hinzufügen, wie im folgenden Code gezeigt.
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}"
Die Ausgabe lautet 10.000000.
Abfrageoperatoren für nicht zulässige Datenfelder, z sumByNullable. B. für die Verwendung in Abfrageausdrücken, sind ebenfalls vorhanden. Die Abfrageoperatoren für nicht nullable Typen sind nicht typkompatibel mit nullablen Typen. Daher müssen Sie die nullable Version des entsprechenden Abfrageoperators verwenden, wenn Sie mit nullablen Datenwerten arbeiten. Weitere Informationen finden Sie unter Abfrageausdrücke.
Das folgende Beispiel zeigt die Verwendung von nullablen Operatoren in einem F#-Abfrageausdruck. Die erste Abfrage zeigt, wie Sie eine Abfrage ohne nullablen Operator schreiben würden. Die zweite Abfrage zeigt eine entsprechende Abfrage an, die einen Null-Operator verwendet. Den vollständigen Kontext, einschließlich der Einrichtung der Datenbank für die Verwendung dieses Beispielcodes, finden Sie unter Exemplarische Vorgehensweise: Zugreifen auf eine SQL-Datenbank mithilfe von Typanbietern.
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}")