[英]Linq Lambda Where clause with in a where clause
我试图建立一个带有serval where子句的lambda表达式。
项目,webProperty和配置文件都是列表。 我试图找到一个包含配置文件的配置文件,该配置文件是3级列表。 实际上,我真正想做的就是验证它确实存在。
var x = AccountSummeriesResponse.items.Where(wp => wp.webProperties.Where(p => p.profiles.Where(a => a.id == profile ))).FirstOrDefault();
我收到以下错误。
无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'bool'
该探针是Enumerable.Where返回IEnumarable<T>
但Where
的谓词期望一个布尔值。 您可以改用Any :
var x = AccountSummeriesResponse.items
.Where(wp => wp.webProperties.Any(p => p.profiles.Any(a => a.id == profile )))
.FirstOrDefault();
另外,您可以使用FirstOrDefault替换Where,例如:
var x = AccountSummeriesResponse.items
.FirstOrDefault(wp => wp.webProperties.Any(p => p.profiles
.Any(a => a.id == profile )));
这是因为where子句中的Where(p => p.profiles.Where(a => a.id == profile ))
( Predicate
)需要返回布尔值,并且您正在返回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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.