2016-04-22 25 views
1

Ich versuche, die LINQ to Objekte Abfrage auszuführen, wie folgt:Wie kann ich den bedingten Nulloperator verwenden, um nach Nullstring zu suchen?

var c1 = allCustomers 
    .Where(x => x.CompanyName.Replace("'", "").StartsWith(searchText)) 
    .ToList(); 

Dies funktioniert gut, solange Company nicht null ist.

Also, ich dachte, dies scheint der perfekte Ort für den neuen Null bedingten Operator! Ändern Sie einfach zu:

var c1 = allCustomers 
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText)) 
    .ToList(); 

und alles sollte funktionieren!

Stattdessen erhalte ich die Fehlermeldung:

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?) 

ich nicht ganz sicher bin, wie zu erreichen, was ich hier will. Wie würde ich die Nullbedingung in diesem Szenario verwenden?

Antwort

5

unterstützen Sie benötigen einen coalesce Bediener das Tri-State zu einem richtigen boolean zu konvertieren.

var c1 = allCustomers 
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false) 
    .ToList(); 

Ich nenne bool? ein Tri-State, weil es drei Werte haben kann: true, false und null; Daher ist das Konvertieren von bool? in bool eine einschränkende Konvertierung, die eine explizite Behandlung erfordert.

1

Sie brauchen mehr Fragezeichen! Ich denke, Sie brauchen auch null Koaleszenz, da jetzt auch Null zurückgeben kann.

(x.CompanyName?.Replace("'", "") ?? string.Empty).StartsWith(searchText)) 

die ?? string.empty Kräfte, die eine Nicht-Null-Zeichenfolge, die jetzt .startswith

seine
+0

ack, lege ich mein auf der Saite anstelle des Bool. Ich denke mein wird funktionieren, aber die? falsche Versionen sind besser. –

+0

Ja, die anderen 2 werden einen Kurzschluss auf dem.? und einfach falsch zurückgeben. – Scottie

+0

ich interpretierte das Frage-Tool wörtlich auf den "Check für Null String" -Teil, nicht auf den 'bool? ' Teil in den Details. –

1

Verwenden ?? Betreiber wie:

Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false) 
+2

Könnten Sie eine Erklärung dafür liefern, warum der Nullkoaleszenzoperator dies lösen würde? – Lukazoid