gpt4 book ai didi

entity-framework - 如何在 ADO.NET Entity Framework 中使用预先加载对相关实体进行排序

转载 作者:行者123 更新时间:2023-12-04 08:31:21 26 4
gpt4 key购买 nike

问候,

考虑到 Northwind 示例表 Customers、Orders 和 OrderDetails,我想提前加载与上述表相对应的相关实体,但我需要在获取实体之前对数据库中的子实体进行排序。

基本情况:

var someQueryable = from customer in northwindContext.Customers.Include("Orders.OrderDetails") 
select customer;

但我还需要在数据库端(在将这些实体提取到内存中之前)根据这些表上的某个随机列对 Orders 和 OrderDetails 进行排序。有没有可能没有一些投影,就像在 T-SQL 中一样?解决方案是使用 e-SQL 还是 LINQ to Entities 并不重要。我在网上搜索但我对找到的答案并不满意,因为它们主要涉及将数据投影到某种匿名类型,然后重新查询该匿名类型以按照您喜欢的顺序获取子实体。同样使用 CreateSourceQuery() 对我来说似乎不是一个选择,因为我需要获取数据库端的数据,通过预先加载但只是通过订购子实体。那就是我想在执行任何查询之前执行“ORDER BY”,然后按照我想要的顺序获取实体。在此先感谢您的指导。作为个人说明,请原谅直接的语言,因为我对 Microsoft 以如此不成熟的形式发布 EF 感到有点生气,即使与 Linq to SQL 相比(他们似乎正在慢慢摆脱)。我希望这个 EF 东西会变得更好,并且在 .NET FX 4.0 的发布版本中没有重大错误。

最佳答案

其实我有Tip正好解决了这个问题。

相关实体的排序不受“支持”,但使用 Craig 展示的投影方法 AND 依赖于称为“关系修复”的东西,您可以获得非常相似的工作:

如果你这样做:

var projection = from c in ctx.Customers
select new {
Customer = c,
Orders = c.Orders.OrderByDescending(
o => o.OrderDate
)
};

foreach(var anon in projection )
{
anon.Orders //is sorted (because of the projection)
anon.Customer.Orders // is sorted too! because of relationship fixup
}

这意味着如果你这样做:

var customers = projection.AsEnumerable().Select(x => x.Customer);

您将拥有已排序订单的客户!

有关更多信息,请参阅提示。

希望对你有帮助

亚历克斯

关于entity-framework - 如何在 ADO.NET Entity Framework 中使用预先加载对相关实体进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996438/

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