我正在尝试使用serval构建一个lambda表达式,其中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' 到了布尔'
答案 0 :(得分:9)
问题是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();
此外,您可以像这样替换Where with FirstOrDefault: -
var x = AccountSummeriesResponse.items
.FirstOrDefault(wp => wp.webProperties.Any(p => p.profiles
.Any(a => a.id == profile )));
答案 1 :(得分:0)
那是因为where子句中的委托(Predicate
)需要返回bool而你返回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();