我只是在学习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查询?
谢谢!
答案 0 :(得分:8)
Dictionary
是IEnumerable
的{{1}}实现,包含KeyValuePair
和Key
属性:
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 Expression
和LINQ
的概念。您已使用Lambda Expression
。但是,如果必须使用LINQ
,则第一个条件是您使用的数据集必须实现IEnumerable
接口,例如LIST<T>
现在将您的LINQ
代码写为:
var selectedOne = (from p in people
select p
where p.Key == "1").Single()