我有结构ifs:
if()
{
query = query.Where(....)
}
if()
{
query = query.Where(....)
}
就像他们对这两个测试一起工作一样,不要互相覆盖?
就像他们对这两个测试一起工作一样,不要互相覆盖?
您的代码将(取决于if()
s 中的结果)链接查询。
最终结果将是所有.Where(...)
s 都应用于源。
您应该能够链接您的查询表达式:
query = query.Where(....).Where(....);
如果您想在谓词创建方面具有一定的灵活性,我建议您使用 LinqKit。使用这个库,您可以动态构建您的Where
子句,例如:
if(condition)
{
predicate.And(something);
}
if(otherCondition)
{
predicate.Or(somethingElse);
}
var result = source.Where(predicate);
它有开源代码,非常容易理解,基于Expression
类,实际上是Linq使用的。
还值得注意的是,仅在需要时才计算结果——因此为 Linq2SQL 创建条件是一个很好的解决方案。
var flg1 = cond1 == null? true : cond1;
var flg2 = cond2 == null? true : cond2;
var result = query.Where(flg1 && flg2)
您还可以使用DynamicQuery 库。然后你可以使用喜欢
query.Where("field1=1 and field2=2");