2014-10-29 75 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()