繁体   English   中英

如何将where子句附加到实体框架ObjectSet

[英]How to append a where clause to an Entity Framework ObjectSet

我想将一组条件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);

但是,这使我失去了使用.include来渴望加载我的相关实体的能力。

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

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

如果您打算逐步建立标准,那么另一种选择是利用EntitySQLQueryBuilder方法:

var query = context.AuditLogs.Where("it.WebsiteId = 1");
query = query.Where("...");
var auditLog = query.Include("yourNavPropertyName")
                    .ToList();

在这里只要一些老式的衬裙就足够了。 假设您有一个名为SiteOwner的属性,则可以完成以下查询的工作

using (Entities context = new Entities()){
  var webSites = from sites in context.AuditLogs.Include("SiteOwner")
                 where sites.WebSiteId == 1
                 select sites;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM