Как выбрать с помощью linq для сущности категории и подкатегории? - PullRequest
0 голосов
/ 10 июля 2011

Вот структура моей таблицы категорий

Categories Table
--------------------------------
ID      Name      ParentID

1       NameOne    NULL
2       NameTwo    1
3       NameThree  1
4       NameFour   1

Вот мой ItemTable, который имеет ссылочный ключ к таблице категорий

Items Table
--------------------------------------------
ItemID   CategoryID SubCategoryID      ItemName
1        1          2                  ItemOne
2        1          3                  ItemTwo

Как я могу присоединиться к нему, чтобы получить уникальные записи, как в примере ниже, используя LINQ to entity?

Результат должен быть

ItemID               CategoryName   SubCategoryName           ItemName
-----------------------------------------------------------------------
1                    NameOne        NameTwo                   ItemOne
2                    NameOne        NameThree                 ItemTwo   

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

Я предполагаю, что вы используете модель данных объекта (файл .edmx), куда вы перетащили все необходимые таблицы из базы данных.

Мне трудно дать вам точный запрос, так как я не знаю, как вы назвали определенные ссылки и модели.

Надеюсь, это поможет вам начать:

var q = from item in context.Items
        select new {
            ItemID = item.ItemID,
            CategoryName = item.Category.Name,
            SubCategoryName = item.SubCategory.Name,
            ItemName = item.ItemName
        };

Обратите внимание, что «Категория» и «Подкатегория» являются ссылками на записи в таблице «Категории» с помощью CategoryId и SubCategoryId в таблице «Элементы». Поэтому замените их на имена, которые вы назвали в файле модели данных.

Удачи!

0 голосов
/ 10 июля 2011

Я согласен с предположением @ Муханнада:

Я предполагаю, что вы используете модель данных объекта (файл .edmx), куда вы перетащили все необходимые таблицы из базы данных.

Однако, если это не так, то вы можете попробовать использовать объединение, например так:

List<Item> items = someMethodToFillItems();
List<Category> categories = someMethodToFillCategories();

var q = (from item in items join
          cat in categories on cat.Id equals item.CategoryId
          subCat in categories on subCat.ParentId equals cat.Id
    select new {
        ItemID = item.ItemID,
        CategoryName = cat.Name,
        SubCategoryName = subCat.Name,
        ItemName = item.ItemName
    }
);
0 голосов
/ 10 июля 2011

Нечто подобное может работать в зависимости от того, как определены ваши сущности.

var results = Entities.Items.Select( i => new { ItemID = i.ID, CategoryName = i.Category.Name, SubCategoryName = i.SubCategory.Name, ItemName = i.Name } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...