使用LINQ选择父对象时排序子对象
想象一下你有一些看起来像这样的实体框架实体(显然不是这些特定的类,但是自动生成的实体框架具有所有的实体框架管道;这些仅用于说明):
public class Parent
{
public int ID { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
public Parent Parent { get; set; }
public int Number { get; set; }
}
我有一个LINQ查询,如下所示:
from parent in context.Parents.Include("Child")
select parent
但是,这会返回孩子ID编号的父母名单。 我希望孩子们可以在其父母的数字属性中进行排序。 如何才能做到这一点?
编辑:澄清:这个想法是让查询隐藏在方法调用(在图层外观)后面,它只是返回一个IList<Parent>
。 这使得像匿名类查询和手动排序这样的解决方案变得痛苦(与一些万能解决方案相比,您可以在查询中完成它)。
Alex James在这篇技巧中讨论了这个问题。
实质上,根据标准关系建模,关系被视为无序。 所以你不能对它们进行排序。 但是你可以投射到其他可以排序的集合。
看看这个帖子。 你可以尝试这样的事情:
var query = ((from parent in context.Parents
from child in parent.Child
orderby child.Number ascending
select parent) as ObjectQuery<Parent>
).Include("Child");
一种选择是在内存中执行查询和排序(例如在输出上)。
var parents = context.Parents.Include("Child").ToList(); //note that ToList is here just to execute the query and get the objects in memory
foreach (var p in parents)
{
//do something with parent item
foreach (var c in p.Child.OrderBy(c => c.Number))
{
/do something with the child item
}
}
还有两个其他选项似乎也适用于他们自己的利弊:
LINQ“。在子查询中包含”orderby“
LINQ OrderBy名称ThenBy ChildrenCollection.Name
链接地址: http://www.djcxy.com/p/6419.html上一篇: Sort child objects while selecting the parent using LINQ