EF4 - C # Сортировка с использованием лямбда-выражения - PullRequest
1 голос
/ 09 марта 2011

В SQL я могу написать

SELECT a.*, b.*
FROM master_table a
LEFT JOIN detail_table b ON (b.a_id = a.id)
ORDER BY a.id, b.order_field

Можно ли сделать то же самое с EF4?Я не могу понять, как указать порядок по пункту.Пока что пробовал

List<master_table> l = context.master_table.Include("detail_table").
OrderBy(x=>x.id).
ThenBy( //here is the problem, y=>y.detail_table.order_filed doesn't compile, 
//y=>y.detail_tables.OrderBy(z=>z.order_field) - throws a run-time exception
).
ToList();

Спасибо.

1 Ответ

3 голосов
/ 09 марта 2011

Синтаксис в LINQ to Entities может быть похож на ваш SQL-запрос:

var result = from a in context.master_table
             join b in context.detail_table on a.id equals b.a_id
             orderby a.id, b.order_field
             select new { /*...*/};

Редактировать:

С пояснениями из вашего комментария - Проблема в том, чточто в запросе SQL у вас есть пары элементов, к которым вы присоединяетесь (a, b) - в то время как в запросе Linq to Entities вы пытаетесь получить вторичный порядок с помощью свойства навигации .

Разница в том, что между записями master_table и detail_table в этом контексте существует отношение один ко многим, у вас уже есть группировка по записи master_table - учитывая, что это не имеет смысла (компилятору или вообще), чтобы иметь возможность выразить этот порядок сортировки на уровне detail_table.

Я бы просто применил его при перечислении результатов - записи master_table уже находятся в правильном порядке, просто верните детали, используя foo.detail_tables.OrderBy(x=>x.order_field).

...