实体框架可查询的多个.Where()子句

Zap*_*ica 6 c# entity-framework entity-framework-6

我正在尝试使用Entity Framework实现复杂的过滤器:我想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
Run Code Online (Sandbox Code Playgroud)

我知道我能做到:

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

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

Vla*_*274 8

.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
Run Code Online (Sandbox Code Playgroud)

  • 很好,但是会构建一个 AND 子句。创建多个 OR 条件并不十分简单。 (4认同)