C# 解决linq表达式错误

C# 解决linq表达式错误,c#,linq,generic-list,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(); List cod=MyRules.ToList().Where(r=>r.Conditions.ToList().W

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

List<Condition> cod = MyRules.ToList().Where(r=>r.Conditions.ToList().Where(c=>c.id == 123).ToList();
List cod=MyRules.ToList().Where(r=>r.Conditions.ToList().Where(c=>c.id==123.ToList();
在这里,我需要获取所有具有“id”=123条件的“MyRules”
请帮助我找出正确的方法来更正此表达式。提前谢谢。

首先,不清楚您为什么要到处调用
ToList
。最后,可能…但不需要更早。我想您可能正在寻找
any
方法:

List<Condition> cod = MyRules.Where(r => r.Conditions.Any(c => c.id == 123))
                             .ToList();
List cod=MyRules.Where(r=>r.Conditions.Any(c=>c.id==123))
.ToList();
请注意,每行编写一个“顶级”方法调用可以更容易地检查括号(您的原始代码至少缺少一个右括号),并且通常更容易阅读


如果你想找到所有条件的id都是123的规则,你可以使用
all
而不是
Any
首先,不清楚你为什么到处调用
ToList
。最后,也许……但不需要更早。我想你可能正在寻找
Any
方法:

List<Condition> cod = MyRules.Where(r => r.Conditions.Any(c => c.id == 123))
                             .ToList();
List cod=MyRules.Where(r=>r.Conditions.Any(c=>c.id==123))
.ToList();
请注意,每行编写一个“顶级”方法调用可以更容易地检查括号(您的原始代码至少缺少一个右括号),并且通常更容易阅读


如果要查找所有条件的
id
为123的规则,可以使用
all
而不是
Any

您有
ToList
调用,在
where
子句内:

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

不要到处使用
ToList()
。如果您的类型是可枚举的,您不需要将它们转换为
List
来查询它们。

您有
ToList
调用,在
Where
子句内:

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

不要使用
ToList()
无处不在。如果您的类型是可枚举的,则无需将它们转换为
列表来查询它们。

原始问题缺少括号,您的answer@Joe我是故意这么做的,所以OP可以很容易地找到错误。好吧,我可能会用不同的措辞。谢谢原始问题缺少括号,你的朋友也是answer@Joe我是故意这么做的,所以OP可以很容易地找到错误。好吧,我可能会用不同的措辞。谢谢