2010-03-04 111 views
5

如何進行忽略空值(或可空值)的linq搜索?Linq搜索,忽略空值

我有一個方法

IEnumerable<X> Search(int? a, int? b, int? c) 

而且我希望它在任何整數的返回比賽嗎?那不是空的。

IE:如果ac具有值1和9以及b爲空的搜索應該呈現(大約)至

SELECT * 
FROM [TABLE] 
WHERE a = 1 
AND c = 9 

我的真正方法將具有5+ paramters,所以迭代組合是正確的。

回答

5
IEnumerable<X> query = items; 
if (a.HasValue) { 
    query = query.Where(x => x.a == a.Value) 
} 
if (b.HasValue) { 
    query = query.Where(x => x.b == b.Value) 
} 
if (c.HasValue) { 
    query = query.Where(x => x.c == c.Value) 
} 
4
var result = from row in table 
where (!a.HasValue || row.a == a.Value) 
&& (!b.HasValue || row.b == b.Value) 
&& (!c.HasValue || row.c == c.Value) 
select row; 
+0

你測試過了嗎?當我嘗試枚舉結果時,我得到一個'InvalidOperationException'。 – 2010-03-04 01:48:40

+0

你有錯誤是什麼更多細節?什麼是錯誤信息? – 2010-03-04 02:01:41

+0

@David'{「可空對象必須有一個值。」}' – 2010-03-04 02:04:17