Извлечение из таблиц внешних ключей с помощью LINQ и LINQ to SQL - PullRequest
0 голосов
/ 26 декабря 2009

У меня есть таблица базы данных с именем MenuItem (MenuItemID, ParentMenuItemID, MenuItemName). Я хочу использовать это для заполнения элемента управления Menu (возможно, элемента управления .NET Menu).

У каждого MenuItem есть родительский элемент. Если нет родителя, это пункт меню верхнего уровня. Я сделал класс LINQ to SQL, сопоставленный с таблицей MenuItem. Поскольку моя таблица имеет внешний ключ от ParentMenuItemID к MenuItemID, мой автоматически сгенерированный класс MenuItem содержит коллекцию MenuItem. Эта коллекция должна содержать все дочерние элементы пункта меню.

Результат должен храниться в списке.

Возможно ли в одном запросе получить:

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

Не должно быть никаких проблем для извлечения элементов меню верхнего уровня, а затем для их итерации и запроса для каждого дочернего элемента, или для извлечения всех элементов меню, а затем для помещения их в правый родительский элемент. Но если бы это можно было сделать одним запросом ... Я был бы счастлив :)

Ответы [ 2 ]

0 голосов
/ 28 декабря 2009

Вы можете попробовать использовать метод DataLoadOptions.LoadWith.
Однако этот сценарий не поддерживается Microsoft LINQ to SQL Server, а только реализациями Devart для Oracle, MySQL, PostgreSQL и SQLite.
Devart Team
http://www.devart.com/dotconnect
Поставщики данных ADO.NET для Oracle, MySQL, PostgreSQL, SQLite с Entity Framework и поддержка LINQ to SQL

0 голосов
/ 27 декабря 2009

Если ваша модель Linq to Sql имеет свойство навигации для себя, тогда:

dataContext.MenuItem
.Where(m=>m.ParentMenuItemId==null)
.Select(m=> new {TopLevelItem = m,Children = m.Children})

В противном случае вы можете заменить м.Дети на dataContext.MenuItem.Where(c=>c.ParentMenuItemId==m.MenuItemId)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...