我想将一组条件where子句附加到ObjectSet的末尾。但是,子句不会被执行,而是运行原始查询,例如:
using (Entities context = new Entities()){
var q = context.AuditLogs;
q.Where(o => o.WebsiteId == 1);
}
不执行where子句并返回完整的结果集 我可以改为使用IQueryAble,如:
var q = context.AuditLogs.AsQueryable();
q = q.Where(o => o.WebsiteId == 1);
然而,这使我失去了能够使用的能力。包括急切加载我的相关实体。
答案 0 :(得分:6)
不,它不会。在执行查询之前的任何时候,您仍然可以将其强制转换回 ObjectQuery< T> 并在其上调用 Include 等方法:
var query = context.AuditLogs.AsQueryable();
query = query.Where(o => o.WebsiteId == 1);
var auditLog = ((ObjectQuery<AuditLog>)query).Include("yourNavPropertyName")
.ToList();
如果您打算逐步建立标准,那么另一个选择是利用 QueryBuilder 方法利用 EntitySQL :
var query = context.AuditLogs.Where("it.WebsiteId = 1");
query = query.Where("...");
var auditLog = query.Include("yourNavPropertyName")
.ToList();
答案 1 :(得分:1)
只有一些好的老式linq就足够了。假设您有一个名为SiteOwner的属性,您可以完成您尝试使用以下查询执行的操作
using (Entities context = new Entities()){
var webSites = from sites in context.AuditLogs.Include("SiteOwner")
where sites.WebSiteId == 1
select sites;
}