2010-03-31 42 views
5

foreach(var person in peopleList.Where(person => person.FirstName ==「Messi」)) { selectPeople.Add(person); }用LINQ隱藏 - 基本選擇

我只是想知道是否有任何方法來簡化這個使用LINQ。

像,而不是考慮所有我試圖使用LINQ只需填寫清單的「梅西」的人...試圖像...

var selectPeople = peopleList.Select(x=>x.FirstName=="Messi");

然後我可以在沒有檢查的情況下添加列表中的每個人。但它沒有按計劃運作。

也許沒有必要簡化表達式。但這個問題似乎值得加強我的LINQ知識。

+0

我現在已經得到了'VAR selectPeople = peopleList.Where(人=> person.Name == 「梅西」)ToList() ;'所以我想這個問題真的是關於如何使用Select和SelectMany – baron 2010-03-31 00:55:30

+1

'SelectMany'用於每個項目可以返回多個結果並且想要將它們組合成單個結果集。例如。 'IEnumerable allChildren = person.SelectMany(person => person.GetChildren());'你不需要用你的例子。 – 2010-03-31 01:05:24

+1

此外,當您使用lambdas擴展方法而不是查詢表達式時,「Select」常常是多餘的。但是如果你想將對象投影到別的東西上,使用'Select'。例如,當FirstName等於「Messi」時,如果你只想要一個LastNames列表,你可以像'peopleList.Where(p => p.FirstName ==「Messi」)那樣做。Select(p => p.LastName) ;',這應該導致一個'IEnumerable '代表符合給定條件的所有人的姓氏。 – 2010-03-31 01:08:27

回答

5

你很近。在不知情的情況下實際完成。

var selectPeople = peopleList.Where(x=>x.FirstName == "Messi"); 

這將創建一個IEnumerable<X>,其中X是人類列表中的任何類型。

查詢表達式語法將

var selectPeople = from person in peopleList 
        where person.FirstName == "Messi" 
        select person; 

,並使之在混凝土中列表格式,我相信你也已經發現了.ToList()擴展。

1

peopleList是什麼類型?我相信它必須是LINQ工作的一種IEnumerable類型。

var selectPeople = peopleList.AsEnumerable().Select(x=>x.FirstName=="Messi"); 

既然是列表,並釘在你的選擇上List<X>呼叫類型AsEnumerable(),它應該工作。

+0

它是'列表' – baron 2010-03-31 00:58:56

+0

嘗試上面的行,看看是否有效,我們在這裏鑄造爲Enumerable .... – Gabe 2010-03-31 00:59:34

+1

'AsEnumerable()'是不必要的。另外'Select'將導致'IEnumerable '不是'IEnumerable ' – 2010-03-31 01:14:20

1
var selectPeople = new List<Person>(peopleList.Where(x=>x.FirstName=="Messi")); 

,或者如果你已經有了一個名單:

selectPeople.AddRange(peopleList.Where(x=>x.FirstName=="Messi"));