2014-10-29 79 views
1

我只是在學習lambda表達式,我想用lambda表達式來選擇任何特定的項目。 在這裏,我要選擇與重要的人= 1,使selectedOne =「桑傑」如何使用lambda表達式來選擇特定的項目?

var people = new Dictionary<int, string>(); 
    people.Add(1, "sanjay"); 
    people.Add(2, "roshan"); 
    people.Add(3, "neejesh"); 
    people.Add(4, "deep"); 
    var selectedOne = people.Select(x => x.Key == 1); 

我應該如何構建我的拉姆達查詢?

謝謝!

+2

先用'Where'過濾,然後用'Select'獲取結果。 – 2014-10-29 08:00:29

+0

爲什麼使用LINQ與字典而不是查找,例如:'people [1]'? – 2014-10-29 08:05:07

回答

8

Dictionary是農具KeyValuePair包含KeyValue財產IEnumerable

var selectedOne = people.First(x => x.Key == 1).Value; 

您使用錯誤的方法LINQ。 Select用於投影某些值(將一個值轉換爲另一個值)。您需要過濾而不是(通過指定的鍵搜索)。

但是...使用LINQ選擇字典鍵效率不高。更好的是:

var selectedOne = people[1]; 

它是O(1)對O(n)的攤銷 - 巨大的差異。

0

代碼應該是這樣的:

var selectedOne = people.Single(x => x.Key == 1); 

這會給你的鍵值對。如果你只想要弦:

var selectedOne = people.Single(x => x.Key == 1).Value; 
2

你想用在哪裏打電話來篩選結果設置爲你想要的人,然後用選擇來定義你想要的,如結果

var selectedOne = people.Where(x => x.Key == 1).Select(x => x.Value).First(); 

這將是更有效的執行通過字典指數的PWA

0

它看起來像你的混合Lambda ExpressionLINQ概念作爲建議的擡頭。您已使用Lambda Expression。但是,如果您必須使用LINQ,則第一個條件是您正在使用的數據收集必須實現IEnumerable接口,例如LIST<T>現在將您的LINQ代碼編寫爲:

var selectedOne = (from p in people 
        select p 
        where p.Key == "1").Single()