Как исправить эту ошибку LINQ - PullRequest
1 голос
/ 31 марта 2011

Результат, который я ожидаю получить здесь: список записей, которые не имеют дочерних элементов, моя схема таблицы меню: ID (длинный), Имя (строка), Порядок (int), ParentID (длинный)

сначала выберите все дочерние идентификаторы уровня листа.Получить все идентификаторы, кроме значений в столбце ParentID.А затем сделайте выбор из меню, соединив leafIDs

здесь мой код:

var leafMenuIDs = menus
                .Select(m => m.ID)
                .Except(menus.Select(m => m.ParentID).Distinct())                                         
                .Distinct();


this.ddlMenu.DataSource = from m in menus
                       join id in leafMenuIDs on m.ID equals id
                       select new { m.ID, m.Name };

я получил ошибку: оператор Except:

System.collections.generic.IEnumberable<long> не содержит определения 'Except', а лучшая перегрузка метода System.LINQ.queryable.Except<TSource>(System.LINQ.IQueryalbe<TSource>, System.collections.generic.IEnumberable<Tsource>) имеет недопустимые аргументы.

, пожалуйста, помогите мне исправить эту ошибку.большое спасибо

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Как насчет чего-то вроде:

var items = from m in menus
            where !menus.Where(c => c.ParentID == m.ID).Any() 
            select new { 
                m.ID,
                m.Name};

Здесь вы выбираете каждый menu, у которого нет ParentID ссылки на него.


В ответчтобы прокомментировать @mmix, вот сгенерированный SQL (используя Linqpad)

SELECT [t0].[ID], [t0].[Name]
FROM [menus] AS [t0]
WHERE NOT (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [menus] AS [t1]
    WHERE [t1].[ParentID] = ([t0].[ID])
    ))
0 голосов
/ 31 марта 2011

Я думаю, что проблема здесь может быть в том, что m=>m.ID & m=>m.ParentID конфликтуют.Попробуйте изменить его на m=>m.ID и x=>x.ParentID (разные имена лямбда-выражений)

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