2014-07-25 93 views
1

我知道,返回一個匿名類型,我可以做到這一點:返回內部匿名類型,其中方法

var test = from c in list 
      where c.SomeField > 200 
      select new { c.SomeField, c.AnotherField }; 

這是很正常的。

現在,我想現在如何返回這個匿名類型做同樣的事情,但使用Where方法。 喜歡的東西:

var test = list.Where((SomeType c) => { if (c.SomeField > 200) 
             return new { c.SomeField, c.AnotherField } }); 

是否有使用Where方法做這件事的方法嗎?

謝謝!

+4

'Where(x => x.SomeField> 200).Select(x => new {SF = x.SomeField,AF = x.AnotherField});' –

+0

返回一個匿名類型?不知道這是最好的主意。你打算如何在呼叫端訪問它? 'dynamic'? –

回答

7

Where不是爲此設計的。 Where預計代理人需要對象並返回bool。因此,在Where中返回匿名類型是不可能的,也沒有意義。

只能過濾與Where您的項目,然後做投影與Select

var test = list.Where(c=> c.SomeField > 200) 
       .Select(c => new { c.SomeField, c.AnotherField }); 

順便說一句,這是equivelant第一個查詢的,因爲它會被翻譯成這一點。


或者,如果您正在使用List<T>工作,你可以使用List<T>.FindAll方法來獲取所有與您匹配謂詞的項目。