多条件linq

时间:2016-04-14 11:20:24

标签: entity-framework linq

我在我的应用程序中使用linq。查询有几个条件.Where(a => !one || a.id == 1)

bool one = false;
bool two = false;
bool three = false;

db.type.Where(w => !one|| w.id == 1).Where(w => !two || w.id == 2).Where(w => !three || w.id == 3).ToList()

但是这个查询给了我结果:

db.type.Where(w => w.id == 1 &&
                  w.id == 2 &&
                  w.id == 3)

我想得到:

db.type.Where(w => w.id == 1 ||
                  w.id == 2 ||
                  w.id == 3)

请帮帮我。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果你需要or where谓词中的id,你可以使用Enumerable.Contains()这样的方法:

var ids = new[]{1, 2, 3};
db.type.Where(w => ids.Contains(w.id));

但是,我假设你想要的是一种动态创建Where子句的谓词的方法,相信我,使用带有或带条件的标志不是这样做的方法; 不仅条件会让其他读取该代码的人流血,而且还会导致查询性能下降。 正确的方法是使用PredicateBuilder。看一下这篇文章,看看它应该如何使用以及它的作用。

但是有一点需要注意 - 它不会在Entity FrameworknHibernate中工作。要为上述ORM创建一个,请在Universal predicate builder上使用此博文。