解决linq表达式错误

时间:2015-10-07 14:22:44

标签: c# linq generic-list

我有一个如下所示的代码,但它给出了编译错误"无法转换表达式类型' System.Collections.Generic.List'返回类型' bool'

List<Condition> cod = MyRules.ToList().Where(r=>r.Conditions.ToList().Where(c=>c.id == 123).ToList();

在这里,我需要获得所有&#39; MyRules&#39;哪个条件有&#39; id&#39; = 123 请帮我找出正确的表达方式。提前谢谢。

2 个答案:

答案 0 :(得分:4)

首先,您不清楚为什么要在整个地方呼叫ToList。最后,也许......但不需要它。我想你可能正在寻找Any方法:

List<Condition> cod = MyRules.Where(r => r.Conditions.Any(c => c.id == 123))
                             .ToList();

注意如何在每行编写一个“顶级”方法调用,可以更容易地检查括号(原始代码至少缺少一个右括号),并且更容易阅读。

如果您想查找所有的条件,条件的id为123,则您使用All代替Any

答案 1 :(得分:1)

您在ToList子句内进行Where调用:

      |                                               |
      ˅                                               ˅      
   Where(r=>r.Conditions.ToList().Where(c=>c.id == 123).ToList()

不要在任何地方使用ToList()。如果您的类型是可枚举的,则无需将其转换为List<T>来查询它们。