C# 忽略空值的Linq搜索

C# 忽略空值的Linq搜索,c#,linq-to-sql,C#,Linq To Sql,如何进行忽略空值(或可空值)的linq搜索 我有办法 IEnumerable<X> Search(int? a, int? b, int? c) 我的实方法将有5个以上的参数,因此迭代组合是正确的。IEnumerable query=items; var result = from row in table where (!a.HasValue || row.a == a.Value) && (!b.HasValue || row.b == b.Value) &a

如何进行忽略空值(或可空值)的linq搜索

我有办法

IEnumerable<X> Search(int? a, int? b, int? c)
我的实方法将有5个以上的参数,因此迭代组合是正确的。

IEnumerable query=items;
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;
如果(a.HasValue){ query=query.Where(x=>x.a==a.Value) } 如果(b.HasValue){ query=query.Where(x=>x.b==b.Value) } if(c.HasValue){ query=query.Where(x=>x.c==c.Value) }
您对此进行过测试吗?当我尝试枚举结果时,我得到了一个
invalidoOperationException
。您有关于错误的更多详细信息吗?错误消息是什么?@David
{“可空对象必须有一个值。”}
除非您的查询写错了,否则不可能发生这种情况。如果对每个“或”对的前半部分求值为true,则不应调用后半部分。您确定已将“!”放在正确的行前面吗?另外,您是否验证了每个组使用的是一个变量,您没有类似以下内容:(!a.HasValue | | row.a==b.Value)?@David我进行了双重检查,但不是这样。所有行都是noted,并且内部一致(
a
a
a
)。
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;
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)
}