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"

Linq Lambda Where子句在Where子句中

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();