2015-12-07 59 views
0

我正在嘗試使用serval構建一個lambda表達式,其中子句與其他對象在一起。Linq Lambda Where子句在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' 爲 '布爾'

回答

7

的萬阿英,蔣達清是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(); 

此外,您還可以這樣用FirstOrDefault更換式中: -

var x = AccountSummeriesResponse.items 
     .FirstOrDefault(wp => wp.webProperties.Any(p => p.profiles 
               .Any(a => a.id == profile))); 
+1

你的先生是我的英雄我試着用任何玩,它無法得到工作。 – DaImTo

0

這是因爲委託(Predicate)裏面的where子句需要返回布爾和你正在返回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();