LINQ语句所有检查语法问题

时间:2009-12-10 16:51:12

标签: c# linq c#-3.0

我想弄清楚为什么它不喜欢我在All()中的支票:

itemList.Where(x => itemList.All(x.ItemType != ItemType.Test1 && x.ItemType != ItemType.Test2)).ToList();
  

The type arguments for method 'System.Linq.Enumerable.All<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,bool>)' cannot be inferred from the usage.

更新:这里的原意是给我回列表,过滤掉All()中的标准匹配的那些项目。

因此,请过滤掉Item.Type不是这个或那个的列表中的那些项目。

2 个答案:

答案 0 :(得分:3)

您还没有提供lambda表达式 - 您想要对内部itemList中的每个项目执行什么操作?它应该是这样的:     itemList.Where(x =&gt; itemList.All(item =&gt; x.ItemType!= item.Test1                                      &安培;&安培; x.ItemType!= item.Test2))。ToList();

请注意“item =&gt;”部分。

All方法中再次使用相同的集合是不寻常的......但是,您能否让我们了解更大的图片?

编辑:你根本不需要打电话给All。出了什么问题:

itemList.Where(x => x.ItemType != ItemType.Test1 && x.ItemType != ItemType.Test2)
        .ToList();

?我想你可能对All的含义感到有点困惑 - 它会测试给定集合中的 all 项是否与给定条件匹配。

答案 1 :(得分:1)

All方法需要Func<T, bool>谓词作为参数。你的代码没有。

目前尚不清楚您的代码究竟要做什么,因此很难提出更具体的修复方法。