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

问候,

考虑到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”,然后按照我想要的顺序获取实体.提前感谢任何指导.作为一个个人注释,请原谅直接语言,因为我有点生气,微软因为发布EF这样一个不成熟的形状,甚至比Linq to SQL(他们似乎慢慢走开).我希望这个EF的东西会更好,并且在.NET FX 4.0的发布版本中没有明显的错误.

实际上我有Tip正好解决了这个问题.

不支持对相关实体进行排序,但使用投影方法Craig显示并依赖于称为“关系修正”的东西,您可以获得非常类似的工作:

如果你这样做:

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);

您将拥有已排序的客户!

有关详细信息,请参阅提示.

希望这可以帮助

亚历克斯

https://stackoverflow.com/questions/996438/how-to-sort-related-entities-with-eager-loading-in-ado-net-entity-framework

转载注明原文:entity-framework – 如何在ADO.NET Entity Framework中使用预先加载对相关实体进行排序