C# 在linq查询中,如何对包含的表进行排序?(内部代码)

C# 在linq查询中,如何对包含的表进行排序?(内部代码),c#,entity-framework,linq,C#,Entity Framework,Linq,假设您有这样一个查询: var query = context.Cars.Include("Owner").Include("Parts").Where(c=>c.id == strID); 它从汽车中获取一行,也从车主和零件表中获取行。如果我想按Parts.PartName列订购Parts表,该怎么办 我使用的是EF4。如果您想使用“急切加载”来执行此操作,那么除了将查询投影到相关实体之外,您别无选择: //In Linq to Entities you can project

假设您有这样一个查询:

var query = context.Cars.Include("Owner").Include("Parts").Where(c=>c.id == strID);   
它从
汽车
中获取一行,也从
车主
零件
表中获取行。如果我想按
Parts.PartName
列订购
Parts
表,该怎么办


我使用的是EF4。

如果您想使用“急切加载”来执行此操作,那么除了将查询投影到相关实体之外,您别无选择:

//In Linq to Entities you can project using an anonymous type or a custom class(also known as a DTO)
var cars= context.Cars
                 .Include("Owner")
                 .Include("Parts")
                 .Where(c=>c.id == strID)
                 .Select(c=>new {//Change this projection at your convinience
                                 Car=c, 
                                 Parts= c.Parts.OrderBy(p=>p.PartName), 
                                 Owner=c.Owner
                                });
如果您使用的是EF的主要版本(至少4.1),那么您可以使用如下所示:

var car= context.Cars.Include("Owner").FirstOrDefault(c=>c.id == strID);
context.Entry(car) 
       .Collection(b => b.Parts) 
       .Query() 
       .OrderBy(p => p.PartName) 
       .Load(); 

如果要使用“快速加载”来执行此操作,则除了投影查询之外,您没有其他选择可以将订单依据应用于相关实体:

//In Linq to Entities you can project using an anonymous type or a custom class(also known as a DTO)
var cars= context.Cars
                 .Include("Owner")
                 .Include("Parts")
                 .Where(c=>c.id == strID)
                 .Select(c=>new {//Change this projection at your convinience
                                 Car=c, 
                                 Parts= c.Parts.OrderBy(p=>p.PartName), 
                                 Owner=c.Owner
                                });
如果您使用的是EF的主要版本(至少4.1),那么您可以使用如下所示:

var car= context.Cars.Include("Owner").FirstOrDefault(c=>c.id == strID);
context.Entry(car) 
       .Collection(b => b.Parts) 
       .Query() 
       .OrderBy(p => p.PartName) 
       .Load(); 

嗯,智能感知似乎不喜欢第二行(context.Entry…)“不包含‘Entry’的定义,并且没有扩展方法‘Entry’。您是否添加了
System.Data.Entity
namespace?请检查此引用:哦,就是这样,让我看看是否可以重新调整我的答案,因为它仅在4.1版本之后才起作用。”。查看另一行了解更多信息嗯,intellisense似乎不喜欢第二行(context.Entry…)“不包含‘Entry’的定义,并且没有扩展方法‘Entry’。您是否添加了
System.Data.Entity
namespace?请检查此引用:哦,就是这样,让我看看是否可以重新调整我的答案,因为它仅在4.1版本之后才起作用。”。更多信息,请查看此其他