-7

我有结构ifs:

if()
{
  query = query.Where(....)
}

if()
{
   query = query.Where(....)
}

就像他们对这两个测试一起工作一样,不要互相覆盖?

4

4 回答 4

2

就像他们对这两个测试一起工作一样,不要互相覆盖?

您的代码将(取决于if()s 中的结果)链接查询。

最终结果将是所有.Where(...)s 都应用于源。

于 2012-10-01T09:20:56.453 回答
1

您应该能够链接您的查询表达式:

query = query.Where(....).Where(....);
于 2012-10-01T09:19:07.393 回答
1

如果您想在谓词创建方面具有一定的灵活性,我建议您使用 LinqKit。使用这个库,您可以动态构建您的Where子句,例如:

if(condition)
{
   predicate.And(something);
}
if(otherCondition)
{
   predicate.Or(somethingElse);
}
var result = source.Where(predicate);

它有开源代码,非常容易理解,基于Expression类,实际上是Linq使用的。

还值得注意的是,仅在需要时才计算结果——因此为 Linq2SQL 创建条件是一个很好的解决方案。

于 2012-10-01T09:20:06.790 回答
0
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");
于 2012-10-01T09:20:51.087 回答