Как добавить предложение where к объектному набору Entity Framework - PullRequest
2 голосов
/ 02 ноября 2010

Я хотел бы добавить набор условных выражений where в конец ObjectSet.Однако предложения не выполняются, и вместо этого выполняется исходный запрос, например:

using (Entities context = new Entities()){
var q = context.AuditLogs;
q.Where(o => o.WebsiteId == 1);
}

Предложение where не выполняется и возвращается полный набор результатов. Вместо этого я мог бы использовать IQueryAble, как в1004 *

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

Однако это лишает меня возможности использовать .Include для активной загрузки моих связанных сущностей.

Ответы [ 2 ]

6 голосов
/ 02 ноября 2010

Нет, не будет.в любой момент до выполнения запроса вы все равно сможете привести его обратно к ObjectQuery и вызвать методы типа Включить в него :

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

Если вы намерены постепенно наращивать критерии, тогда другим вариантом будет использование EntitySQL с QueryBuilder методами:

var query = context.AuditLogs.Where("it.WebsiteId = 1");
query = query.Where("...");
var auditLog = query.Include("yourNavPropertyName")
                    .ToList();
1 голос
/ 02 ноября 2010

Достаточно просто старого доброго стиля. Предполагая, что у вас есть свойство с именем SiteOwner, вы можете выполнить то, что пытаетесь сделать, с помощью запроса ниже

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