entity framework可查询的多个.Where()子句

我正在尝试使用Entity Framework实现复杂的filter:我想根据我提供的搜索条件向可查询对象添加where子句。

我可以在Entity Framework 6中执行以下操作吗?

 var queryable = db.Users.Where(x => x.Enabled && !x.Deleted); // Filter var userId = User.Identity.GetUserId(); queryable.Where(x => x.AspNetUser.Id == userId); queryable.Where(x => x.Status >= 2); // ...etc 

我知道我能做到:

 var queryable = db.Users .Where(x => x.Enabled && !x.Deleted) .Where(x => x.AspNetUser.Id == userId) .Where(x => x.Status >= 2); 

但是我没有得到这个解决方案的预期结果。 它似乎忽略了第二秒的条款。

.Where返回可查询的内容,它不会修改原始内容。 所以你只需要保存新的可查询。

 var queryable = db.Users.Where(x => x.Enabled && !x.Deleted); // Filter var userId = User.Identity.GetUserId(); queryable = queryable.Where(x => x.AspNetUser.Id == userId); queryable = queryable.Where(x => x.Status >= 2); // ...etc 

我猜你正在尝试的是运行时搜索。 如果是这种情况,您有两种选择。

  1. 使用表达式构建运行时where子句。 您可能必须使用谓词构建器。 此谓词构建器可能无法与Entity Framework一起使用。 但是这个应该与entity framework一起工作。

  2. 使用Dynamic Linq 。 这是迄今为止最容易的。 它非常通用。 你不仅可以在哪里做,它支持选择和订购,以及其他运行时很容易! 看看吧。