Упорядочение по многим сторонам объединения сущностей - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь выполнить следующее, используя Entity Framework 4.1 в .Net 4;

var context = new MyEntities();

var results = context.Diners
    .OrderBy(i => i.MenuItems.Course.DisplayOrder)
    .ThenBy(i => i.MenuItems.DisplayOrder);

Проблема здесь в том, что MenuItems является ObjectSet (коллекцией), а у коллекции нет курса (другой объединенный стол).У MenuItem (единственного числа) есть курс все же.Надеюсь, это очевидно.

Ниже приведен SQL-код, который я бы использовал для этого;

Select
    *
From
    Diner As D
Inner Join
    DinerSelection As DS -- This is the Many to Many that EF has abstracted away.
On  D.DinerId = DS.DinerId
Inner Join
    MenuItem As MI
On  DS.MenuItemId = MI.MenuItemId
Inner Join
    Course As C
On  MI.CourseId = C.CourseId
Order By
    C.DisplayOrder, MI.DisplayOrder

Если это не так просто сделать в EF, тогда я просто сделаю этокак мнение, хотя я бы предпочел не.

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Я думаю, это то, что вы хотите сделать.

.OrderBy(i => i.MenuItems.SelectMany(c=>c.Course).DisplayOrder)
1 голос
/ 13 июня 2011

Если вы хотите перевести ваш SQL-запрос непосредственно в LINQ, вам также нужно выполнить там объединения, используя метод Enumerable.Join .

например, ваше первое объединение

ctx.Diners.Join(ctx.DinerSelection, d => d.DinerId, ds => ds.DinerId, (d, ds) =>
   //Further logic here with the joined elements
);
...