Lambda-Ausdruck mit <bool> und System.Nullable<bool>
Diese kann nicht kompilieren:
void Foo()
{
using (var db = new BarDataContext(ConnectionString))
{
//baz is type 'bool'
//bazNullable is type 'System.Nullable<bool>'
var list = db.Bars.Where(p => p.baz && p.bazNullable); //Compiler:
//Cannot apply operator '&&' to operands of type
//'System.Nullable<bool> and 'bool'
}
}
Muss ich wirklich haben, um diese durch zwei Läufe, wo ich zuerst verwenden Sie die Bedingung, und führen Sie dann durch, die Liste mit den nullable-Bedingungen, oder gibt es eine bessere saubere glatte best-practice-Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
GetValueOrDefault
.GetValueOrDefault
in einer LINQ-Abfrage, aber ausdrücklich hinzufügen== true
gearbeitet.Sowas?
Ich weiß nicht, ob Linq-to-Sql kann damit umgehen.
Gibt es hier zwei Probleme:
Den shortcircuiting
&&
wird nicht unterstützt, auf null festlegbaren Typen aus irgendeinem Grund. (Verwandte Warum gibt es keine gehoben short-circuiting-Operatoren auf `bool?`?)Das zweite ist, dass selbst wenn Sie wurden unterstützt von C# - code macht immer noch keinen Sinn.
Where
braucht einebool
als Ergebnis geben von Ihrem Zustand, nicht einebool?
. So müssen Sie entscheiden, wie der Fall, wobaz==true
undbazNullable==null
behandelt werden sollte.Führt dies entweder zu
p.baz && (p.bazNullable==true)
oderp.baz && (p.bazNullable!=false)
je nachdem, was Sie wollen.Oder alternativ
p.baz && (p.bazNullable??false)
oderp.baz && (p.bazNullable??true)
Sind Sie versucht, eine logische && Betrieb einer nullable bool.
Wenn Sie sicher sind, dass p.bazNullable ist nicht null, dann können Sie versuchen,
oder wenn ein Wert null entspricht false, dann versuchen
könnte man nur tun:
HasValue
ist viel einfacher, aber das könnte auch funktionieren.verwenden:
Zum behandeln von null-exceptions verwenden:
Wie über diese
ODER