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

Nur*_*MAZ 5 linq linq-to-sql entity-framework-4.1

我应该根据孩子的领域对父母进行排序.

示例代码;

IQueryable<Parent> data = context.Parents.Include(o=>o.Children);
Run Code Online (Sandbox Code Playgroud)

// Child有一个成员(字符串)名称.

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

Yak*_*ych 32

您的问题有些令人困惑,因为首先,它使用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()
       );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,请考虑以下设置.父母PA有孩子CB,CD而父母PB有孩子CC和孩子CA.作为排序的结果,父级PB将首先出现在排序列表中,因为子级CA将被用作"主要"子级PB,而CB将是"主要"子级PA.如果这不是您正在寻找的行为,请提供示例和更清晰的说明.


Pau*_*aul 5

你可以取其中一个孩子的名字来排序,大概通过做相应的排序来选择它?

就像是:

IQueryable<Parent> data = context.Parents.OrderBy(
     p=>p.Children.OrderBy(chi => chi.Name).FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)