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

时间:2010-11-02 16:15:18

标签: 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);
}

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

var q = context.AuditLogs.AsQueryable();
q = q.Where(o => o.WebsiteId == 1);

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

2 个答案:

答案 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;
}