通过LINQ中的子属性对父对象进行排序

时间:2009-03-11 14:47:33

标签: c# linq

如何在LINQ中按子对象排序?

A,B和C类.A有B的集合,B有C的集合。我想通过C的Ordinal(int)属性对对象A进行排序。

var query = from a in db.A
        orderby a.Bs.OrderBy(x=> x.C.Ordinal)   <--- ??
        select a;

我似乎无法弄清楚orderby声明。

编辑:

抱歉,我的原始陈述不正确:

A有B和B的集合,持有C对象。 C不是一个集合。

每个A应该在C的序数属性上订购。

另一个编辑/解决方案:

我最终在客户端为显示期间A中的每个B集合做了一个.OrderBy(b =&gt; b.C.Ordinal)。无论如何,事情变得更好,因为我可以让客户按照他们需要的任何顺序进行排序,而不是将其嵌入我的存储库中。

5 个答案:

答案 0 :(得分:6)

您需要找出您感兴趣的 C.

从现实的角度考虑这个问题 - 如果你想按孩子的年龄订购父母, 孩子的年龄要考虑到吗?如果您的父母一方有1岁和5岁的孩子,而且有一位父母有2岁和4岁的孩子,这应该是第一位?

答案 1 :(得分:2)

您正在尝试按集合订购。那不行。您需要选择一个元素或聚合子列表中的单个值。

答案 2 :(得分:1)

我将运用我的美国直觉,并假设您想要按每个A的最大C.Ordinal订购。

IEnumerable<A> result = db.As
  .OrderBy(a => a.Bs
    .Max(b => b.C.Ordinal)
  );

修改:更新为“b.Cs不是集合”

答案 3 :(得分:1)

这可能不是您正在寻找的内容,但它可能会给您一些想法:

.OrderBy(b =&gt; b.C.FirstOrDefault()。Ordinal)

答案 4 :(得分:0)

我最终在客户端为显示期间A中的每个B集合做了一个.OrderBy(b =&gt; b.C.Ordinal)。无论如何,事情变得更好,因为我可以让客户按照他们需要的任何顺序进行排序,而不是将其嵌入我的存储库中。