我目前試圖解決的特定情況涉及到bool?引用數據庫中的可空字段。但邏輯應該適用於許多不同的情況。如何將where子句的部分委託給其他區域
我正在使用實體框架,並有一個布爾對象?屬性。我開始在這個特定的屬性上寫了很多Linq,但是因爲Sql在bool時沒有檢索空值? !=真寫,我發現我寫看起來像查詢:
var Result = from f in FooList
where f.NullableBool == false || f.NullableBool == null
where f.Bar.Contains(SearchTerm)
select f;
這不是一個大問題,但我真的希望能夠刪除「x.NullableBool ==假|| x.NullableBool ==假」到不同的地方,而不是調用是這樣的:
var Result = from f in FooList
where f.IsNot && f.Bar.Contains(SearchTerm)
select f;
我曾嘗試添加屬性和類型的方法,如‘表達< Func鍵<富,布爾>>’,「Func鍵< Foo,bool>'和'bool'到Foo類,但是Linq似乎並不喜歡它們。
任何指針非常讚賞。
感謝
感謝Slauma,這將適用於這種情況。但是因爲這返回一個IQueryable(而不是ObjectQuery),所以我不能使用其他擴展名,如Include。 – Andy
@Andy:在擴展方法調用之前,您必須指定'Include' *:來自FooList.Include(「Bars」)中的f。WhereIsNot()...'。當您使用普通的'Where'方法時,您還需要這樣做,因爲'Where'只返回'IQueryable'。 – Slauma
你總是可以將'IQueryable'轉換回'ObjectQuery',或者你可以安裝EF 4.1,並使用'IQueryable'上的'Include'版本(並在內部進行轉換)。 –