如何在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)。无论如何,事情变得更好,因为我可以让客户按照他们需要的任何顺序进行排序,而不是将其嵌入我的存储库中。
答案 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)。无论如何,事情变得更好,因为我可以让客户按照他们需要的任何顺序进行排序,而不是将其嵌入我的存储库中。