Linq Lambda Where子句在Where子句中
本文关键字:子句 Where Lambda Linq | 更新日期: 2023-09-27 18:26:06
我正试图用serval where子句构建一个lambda表达式。
项目、webProperties和配置文件都是列表。我正试图找到一个包含一个3级列表的配置文件。事实上,我真正想做的就是验证它的存在。
var x = AccountSummeriesResponse.items.Where(wp => wp.webProperties.Where(p => p.profiles.Where(a => a.id == profile ))).FirstOrDefault();
我得到以下错误。
无法隐式转换类型'System.Collections.Generic.IEnumerable'至"bool"
probelm是可枚举的。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替换为FirstOrDefault,如下所示:-
var x = AccountSummeriesResponse.items
.FirstOrDefault(wp => wp.webProperties.Any(p => p.profiles
.Any(a => a.id == profile )));
这是因为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();