如何将where子句附加到Entity Framework ObjectSet

jan*_*bik 2 c# linq linq-to-entities entity-framework-4

我想将一组条件where子句附加到ObjectSet的末尾.但是,子句不会被执行,而是运行原始查询,例如:

using (Entities context = new Entities()){
var q = context.AuditLogs;
q.Where(o => o.WebsiteId == 1);
}
Run Code Online (Sandbox Code Playgroud)

不执行where子句并返回完整的结果集我可以改为使用IQueryAble,如:

var q = context.AuditLogs.AsQueryable();
q = q.Where(o => o.WebsiteId == 1);
Run Code Online (Sandbox Code Playgroud)

然而,这使我丧失了能够使用的能力.包括急切加载我的相关实体.

Mor*_*avi 6

不,它不会.在执行查询之前的任何时候,您仍然可以将其强制转换ObjectQuery <T>并调用Include之类的方法:

var query = context.AuditLogs.AsQueryable();
query = query.Where(o => o.WebsiteId == 1);
var auditLog = ((ObjectQuery<AuditLog>)query).Include("yourNavPropertyName")
                                             .ToList();
Run Code Online (Sandbox Code Playgroud)

如果你的意图是逐步建立一个标准,那么其他的办法是利用EntitySQLQueryBuilder的方法:

var query = context.AuditLogs.Where("it.WebsiteId = 1");
query = query.Where("...");
var auditLog = query.Include("yourNavPropertyName")
                    .ToList();
Run Code Online (Sandbox Code Playgroud)