Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复此LINQ错误_Linq_Linq To Sql - Fatal编程技术网

如何修复此LINQ错误

如何修复此LINQ错误,linq,linq-to-sql,Linq,Linq To Sql,我在这里期望的结果是:没有任何子项的记录列表,我的菜单表模式是:ID(long)、Name(string)、Order(int)、ParentID(long) 首先选择所有叶级子ID。获取除ParentID列中的值之外的所有ID。然后通过加入LeafID执行“从菜单中选择” 这是我的代码: var leafMenuIDs = menus .Select(m => m.ID) .Except(menus.Select(m =&g

我在这里期望的结果是:没有任何子项的记录列表,我的菜单表模式是:ID(long)、Name(string)、Order(int)、ParentID(long)

首先选择所有叶级子ID。获取除ParentID列中的值之外的所有ID。然后通过加入LeafID执行“从菜单中选择”

这是我的代码:

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 };
我得到一个错误:在除运算符为:

System.collections.generic.IEnumberable
不包含“Except”的定义,并且最佳方法重载
System.LINQ.queryable.Except(System.LINQ.IQueryalbe,System.collections.generic.IEnumberable)
具有一些无效参数


请帮我纠正这个错误。非常感谢

像这样的东西怎么样:

var items = from m in menus
            where !menus.Where(c => c.ParentID == m.ID).Any() 
            select new { 
                m.ID,
                m.Name};
在这里,每个
菜单
都会被选中,而该菜单没有父ID


为了回应@mmix的评论,这里是生成的SQL(使用Linqpad)


我认为这里的问题可能是
m=>m.ID
&
m=>m.ParentID
相互冲突。
尝试将其更改为
m=>m.ID
x=>x.ParentID
(不同的lambda表达式名称)

这不应该是菜单吗。ParentID==m.ID?这是如何“计算”到SQL的?它会在一次旅行中完成吗?@mmix-是的,这是一个单一的查询。下面是生成SQL(使用Linqpad)-
从[Menus]中选择[t0].[ID],[t0].[Name]作为[t0],如果不存在(从[Menus]中选择NULL作为[EMPTY]作为[t1],其中[t1].[ParentID]=([t0].[ID])
谢谢大家,我会尝试你们的建议,并向你们反馈。再次感谢。@NevenHuynh-没问题,很乐意帮忙。你知道你可以接受解决问题的答案。(左边的勾号):)你应该在下面继续这个问题。复制可能会使您受益,但其他SI guest ID和ParentId属于同一类型(长),请使用不同的lambda别名菜单尝试第二个select。select(x=>x.ParentId)。Distinct()正如Mvision建议的那样,我将尝试它。非常感谢你
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])
    ))