gpt4 book ai didi

c# - 我可以使用 ".Include"使用 Entity Framework 4 加载分层数据并根据某些条件过滤导航属性吗

转载 作者:行者123 更新时间:2023-11-30 20:10:41 26 4
gpt4 key购买 nike

您好,我正在使用 Entity Framework 4,我正在尝试查询客户及其订单作为导航属性,但我只想加载特定日期的订单。

使用时:

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

如果有任何订单符合条件,我将获得所有订单。

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

最佳答案

不,没有。

简而言之,使用 Include 进行预加载会自动加载所有相关记录(想想没有过滤器的 LEFT OUTER JOIN)。

任何时候你想过滤关联的记录,不要使用 Include - 使用匿名类型投影,EF 只会“计算出”需要检索的内容:

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

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

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

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

我确定您可以使用 LINQ 表达式来做到这一点,但我不记得语法了。

关于c# - 我可以使用 ".Include"使用 Entity Framework 4 加载分层数据并根据某些条件过滤导航属性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com