如何使用子属性对集合进行排序?

时间:2011-07-07 21:53:43

标签: linq linq-to-sql entity-framework-4.1

我应该基于孩子的领域对父母进行排序。

示例代码;

IQueryable<Parent> data = context.Parents.Include(o=>o.Children);

// Child有一个成员(字符串)Name。

问题:如何按子名称排序父母。

2 个答案:

答案 0 :(得分:30)

您的问题有点令人困惑,因为首先,它使用Entity Framework和LINQ-to-SQL进行标记。您实际使用的是哪种ORM?

其次,更重要的是,你说要"sort Parent by Children Names"。您想要按哪个子名称排序?您确实意识到您无法将列表的名称与另一个列表的名称进行比较,并决定哪一个应该先于另一个?

因此,如果我假设你想要按照字典顺序排列的子名称进行排序,那么你的解决方案将是以下内容(@Paul在这个上关闭,但你需要指定你要排序的属性):

context.
Parents.
OrderBy(p => p.
             Children.
             OrderBy(c => c.Name).Select(c => c.Name).FirstOrDefault()
       );

在这种情况下,请考虑以下设置。家长PA有子女CBCD,而家长PB有子女CCCA。作为排序的结果,父PB将在排序列表中排在第一位,因为子CA将用作PB的“主要”子项,而CB将是PA的“主要”孩子。如果这不是您正在寻找的行为,请提供示例和更清晰的说明。

答案 1 :(得分:3)

您可以将其中一个子名称排序,可能通过执行相应的排序来选择它吗?

类似的东西:

IQueryable<Parent> data = context.Parents.OrderBy(
     p=>p.Children.OrderBy(chi => chi.Name).FirstOrDefault());
相关问题