2015-12-07 214 views
0

我正在尝试使用serval构建一个lambda表达式,其中子句与其他对象在一起。Linq Lambda Where子句在where子句中

项目,webProperties和配置文件都是列表。我试图找到一个包含3级列表的配置文件。其实我真正想要做的就是验证它确实存在。

var x = AccountSummeriesResponse.items.Where(wp => wp.webProperties.Where(p => p.profiles.Where(a => a.id == profile))).FirstOrDefault(); 

我收到以下错误。

无法隐式转换类型 'System.Collections.Generic.IEnumerable' 为 '布尔'

回答

7

的万阿英,蒋达清是Enumerable.Where回报IEnumarable<T>Where谓词期望一个boolen。您可以使用Any代替: -

var x = AccountSummeriesResponse.items 
      .Where(wp => wp.webProperties.Any(p => p.profiles.Any(a => a.id == profile))) 
      .FirstOrDefault(); 

此外,您还可以这样用FirstOrDefault更换式中: -

var x = AccountSummeriesResponse.items 
     .FirstOrDefault(wp => wp.webProperties.Any(p => p.profiles 
               .Any(a => a.id == profile))); 
+1

你的先生是我的英雄我试着用任何玩,它无法得到工作。 – DaImTo

0

这是因为委托(Predicate)里面的where子句需要返回布尔和你正在返回IEnumerable(Where(p => p.profiles.Where(a => a.id == profile))),因此报告编译错误。

而是做一个使用Any扩展方法,如果您正在寻找在收集这类事情是否存在..

var x = AccountSummeriesResponse.items.Where(wp => wp.webProperties.Any(p => p.profiles.Any(a => a.id == profile))).FirstOrDefault();