Linq从列表键值对中获取键

本文关键字:获取 键值对 列表 Linq | 更新日期: 2023-09-27 17:49:16

这似乎很简单,但我有一个键值对列表和一个linq语句试图获得键,我不明白为什么这不工作Ex

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

list包含值:1,test1 | 2, test2 | 3, test3作为数据我的linq语句是:

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

似乎足够简单的工作,但不是吗?

Linq从列表键值对中获取键

要获取单个值的键,您可以这样做:

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

你写的东西不应该编译。AsEnumerable()没有接受谓词的重载

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

您可以使用FirstOrDefault

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

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