我需要按照子元素的某个字段对父元素进行排序。
示例代码:
IQueryable<Parent> data = context.Parents.Include(o=>o.Children);
//Child有一个成员(字符串)Name。
问题:如何按照子对象的名称对父对象进行排序。
我需要按照子元素的某个字段对父元素进行排序。
示例代码:
IQueryable<Parent> data = context.Parents.Include(o=>o.Children);
//Child有一个成员(字符串)Name。
问题:如何按照子对象的名称对父对象进行排序。
您的问题有些令人困惑,因为首先它被标记为Entity Framework和LINQ-to-SQL两者。您到底使用哪个ORM?
其次,更重要的是,您说想要按“子项名称”对“父项”进行排序。您想要根据哪个子项名称进行排序?您是否意识到无法将一个名称列表与另一个名称列表进行比较并决定哪个应该排在前面?
因此,如果我假设您想按字典序排序的子项名称进行排序,则解决方案如下(@Paul接近了答案,但您需要指定要进行排序的属性):
context.
Parents.
OrderBy(p => p.
Children.
OrderBy(c => c.Name).Select(c => c.Name).FirstOrDefault()
);
在这种情况下,请考虑以下设置。父元素PA
有子元素CB
和CD
,而父元素PB
有子元素CC
和CA
。由于排序的结果,父元素PB
将在排序列表中排在第一位,因为子元素CA
将被用作PB
的“主”子元素,而CB
将是PA
的“主”子元素。如果这不是您要查找的行为,请提供示例和更清晰的说明。您可以选择其中一个子项名称进行排序,最好是通过相应的排序来选择它?
例如:
IQueryable<Parent> data = context.Parents.OrderBy(
p=>p.Children.OrderBy(chi => chi.Name).FirstOrDefault());
FirstOrDefault()
之后,您还需要获取属性或列,例如FirstOrDefault().MyProperty1
。 - Idrees Khan