使用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

下一篇: Open file from complete path under cursor in Vim