如何使用lambda表达式来选择特定项?

时间:2014-10-29 07:58:42

标签: c# .net lambda

我只是在学习lambda表达式,我想使用lambda表达式来选择任何特定的项目。 在这里,我想选择一个key = 1的人,以便selectedOne =" sanjay"

    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);

我应该如何构建我的lambda查询?

谢谢!

4 个答案:

答案 0 :(得分:8)

DictionaryIEnumerable的{​​{1}}实现,包含KeyValuePairKey属性:

Value

您使用的是错误的LINQ方法。 var selectedOne = people.First(x => x.Key == 1).Value; 用于投影某些值(将一个值转换为另一个值)。您需要过滤(通过指定键搜索)。

但是......使用LINQ选择字典键效率不高。更好的是:

Select

它对O(n)的O(1)摊销 - 巨大差异。

答案 1 :(得分:3)

您想使用Where调用将结果集过滤到您想要的人,然后使用Select来定义您想要的结果,例如

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

按照pwas

的建议,通过字典索引执行查找会更有效率

答案 2 :(得分:0)

代码应该是这样的:

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

这将为您提供keyvalue对。如果只想要字符串:

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

答案 3 :(得分:0)

您似乎在混合Lambda ExpressionLINQ的概念。您已使用Lambda Expression。但是,如果必须使用LINQ,则第一个条件是您使用的数据集必须实现IEnumerable接口,例如LIST<T>现在将您的LINQ代码写为:

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