Используя Linq, пытаясь использовать OrderBy на дочерних объектах - PullRequest
1 голос
/ 25 августа 2010

Попытка использовать Linq с некоторыми объектами Entity для выполнения хитрого запроса здесь. Надеясь на некоторую помощь в этом вопросе, мне трудно найти достойную документацию по:

По сути, я пытаюсь использовать OrderBy, чтобы приказать против ребенка объекта, к которому я обращаюсь. Сложность заключается в том, что у объекта есть несколько дочерних элементов, и в зависимости от типа объекта мне нужно использовать один набор дочерних или другой набор дочерних элементов для упорядочения по.

Для уточнения:

A может быть двух типов: i или ii

Если A относится к типу i, то мне нужно упорядочить по D: то есть A имеет B, у которого много Cs, у которого много D.

Если A относится к типу ii, то мне нужно упорядочить по F: т.е. A имеет E, который имеет много Fs.

Итак, вопрос в том, как я могу заказать по D и F, из A?

Я надеюсь на что-то вроде:

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

Конечно, я также не совсем понимаю, как заказать D, когда у C есть коллекция D

Мысли? И заранее спасибо!

1 Ответ

1 голос
/ 25 августа 2010

Вам нужно использовать статистическую функцию, например Мин или Макс , чтобы выбрать значение, представляющее коллекцию, и использовать это значение для упорядочения. Например:

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();
...