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)
如果任何订单符合标准,我会收到所有订单.
是否可以过滤导航属性以仅返回符合特定条件的行?
不,没有.
总之,渴望装载有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表达式做到这一点,但我不记得语法.
| 归档时间: |
|
| 查看次数: |
2441 次 |
| 最近记录: |