使用Linq,尝试在Object的子元素上使用OrderBy

时间:2010-08-25 18:33:07

标签: sql-server silverlight-4.0 linq-to-entities c#-4.0

尝试使用Linq和一些Entity对象在这里做一个狡猾的查询。希望得到一些帮助,我很难找到合适的文档:

基本上,我正在尝试使用OrderBy对我正在查询的对象的子进行命令。困难的部分是对象有多个子节点,并且根据对象的类型,我需要使用一组子节点或另一组子节点来进行排序。

澄清:

A有两种类型:i,或ii

如果A是i型,那么我需要按D排序:即A有一个B,它有很多Cs,有很多Ds。

如果A是ii类型,那么我需要按F排序:即。 A有一个E,它有很多Fs。

所以问题是,我怎样才能从D?和D来订购?

我希望有类似的东西:

IQueryable<AObject> aObj = query.OrderBy(aObject=> aObject.Type==i? aObject.B.C.D : aObject.E.F).Skip(offset).Take(limit).AsQueryable();

当然,当C有Ds的集合时,我也很困惑如何订购D'

思考?并提前感谢!

1 个答案:

答案 0 :(得分:1)

您需要使用聚合函数(例如MinMax)来选择表示集合的值,并使用该值进行排序。例如:

IQueryable<AObject> aObj = query.OrderBy(aObject =>
    aObject.Type==i ?
    aObject.B.Cs.Max(c => c.Ds.Max(d => d.Foo)) : 
    aObject.E.Fs.Max(f => f.Bar)
).Skip(offset).Take(limit).AsQueryable();