如何进行忽略空值(或无效)的linq搜索?
我有一个方法
IEnumerable<X> Search(int? a, int? b, int? c)
我想让它返回任何一个整数的匹配?这不是空的。
IE:如果a
和c
的值为1和9且b
为空,则搜索应该(大致)呈现为
SELECT *
FROM [TABLE]
WHERE a = 1
AND c = 9
我的真实方法将有5个以上的参数,因此迭代组合就会出现。
答案 0 :(得分: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)
}
答案 1 :(得分: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;