繁体   English   中英

Linq Lambda Where子句和where子句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM