Linq to SQL: выберите категории, которые не имеют подкатегорий - PullRequest
1 голос
/ 01 сентября 2009

Мне нужно захватить все категории, у которых нет подкатегорий

1
^--1.1
^--1.2
    ^--1.2.3

2
^--2.1

3

В этом примере я хотел бы получить [1.1], [1.2.3], [2.1] и [3].

Таблица моих категорий выглядит следующим образом:

CategoryID | CategoryName | ParentID 

Я полагаю, что должен выбрать все категории, где его CategoryID не используется в поле ParentID любой другой категории, но я не знаю, как его написать.

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Попробуйте это:

from c in model.Categories
where !(from inner_c in model.Categories
        select inner_c.ParentID).Contains(c.CategoryID)
select c

Подзапрос является ключевым - мы пытаемся перевести на LINQ:

SELECT * FROM categories WHERE categoryID NOT IN (SELECT parentID FROM categories)
0 голосов
/ 01 сентября 2009

Попробуйте:

List<Category> GetChildlessCategories()
{
    List<int> parentIds = context.Categories.Select(x => x.ParentId);
    return context.Categories.Where(c => !parentsIds.Contains(c.CategoryId));
}

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

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