我是否可以使用".Include"在Entity Framework 4中加载分层数据,并根据某些条件过滤导航属性

use*_*340 2 c# linq hierarchical-data entity-framework-4

你好我正在使用实体框架4,我试图查询客户及其订单作为导航属性,但我只想加载特定日期的订单.

使用时:

List<Customer> CustomerResults = ctx.Customers
.Include("Orders") 
.Where(
       c =>
       c.Orders.Any(od =>(od.DateTimeIn >= this.StartDateComboBox.DateTime && 
       od.DateTimeIn <= this.EndDateComboBox.DateTime))
      );
Run Code Online (Sandbox Code Playgroud)

如果任何订单符合标准,我会收到所有订单.

是否可以过滤导航属性以仅返回符合特定条件的行?

RPM*_*984 7

不,没有.

总之,渴望装载有Include自动加载所有相关记录(觉得一个LEFT OUTER JOIN没有过滤器).

无论何时你想要过滤相关记录,都不要使用Include- 使用匿名类型投影,而EF只会"计算出"需要检索的内容:

var CustomerResults = ctx.Customers 
                         .Select(x => new
                         {
                            Customer = x,
                            Orders = x.Orders.Where(y => y.DateTimeIn > value)
                         }).ToList();
Run Code Online (Sandbox Code Playgroud)

如果要返回一个Customer实体,那么只需在最后进行另一个投影,只需确保首先实现查询(.ToList()).

编辑 - 要放回客户对象,例如:

var Customers = new List<Customer>();
foreach (var anonType in CustomerResults)
{
   Customer c = anonType.Customer;
   c.Orders = anonType.Orders;
   Customers.Add(c);
}
Run Code Online (Sandbox Code Playgroud)

我确信你可以用LINQ表达式做到这一点,但我不记得语法.