linq从列表keyvaluepair获取密钥

时间:2014-03-10 20:39:11

标签: c# linq

这看起来很简单,但我有一个keyvalue对列表和一个试图获取密钥的linq语句,我不明白为什么这个剂量工作Ex

   List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();

列表包含值:1,test1 | 2,test2 | 3,test3作为数据 我的linq声明是:

string Key = list.AsEnumerable(x => x.Value == "test2").Select(x => x.Key).ToString();

看起来很简单,只能起作用吗?

2 个答案:

答案 0 :(得分:1)

要获得单个值的密钥,您需要:

string Key = list.Single(x => x.Value == "test2").Key.ToString();

你写的不应该编译。 AsEnumerable()没有过载谓词。

如果它确实编译了,那么当你在ToString()上调用IEnumerable<int>时,几乎肯定不会给你你想要的东西,这将返回该类型的名称,而不是Single()枚举中的值或First()值。

答案 1 :(得分:1)

您可以使用FirstOrDefault

var pair = list.FirstOrDefault(x => x.Value == "test2");
if(pair != null)
     string Key = pair.Key.ToString();

这比FirstSingle更安全,因为如果没有KeyValuePair给定Value或者有多个元素,它就不会抛出异常具有给定的价值。

相关问题