使用linq查询获取所有字典值

时间:2016-09-01 19:46:09

标签: c# linq

我有一个C#List:

private List<Tuple<string, string>> _list1 = new List<Tuple<string,string>>();
string keyToLookFor;
string valueToLookFor;

我想使用LINQ搜索此List以检查某个键是否已存在,如果是,则其值是否与valueToLookFor匹配。

List.Add(new Tuple<string, string>("1", "data1"));
List.Add(new Tuple<string, string>("2", "data2"));
List.Add(new Tuple<string, string>("2", "data3"));
List.Add(new Tuple<string, string>("3", "data3"));

所以对于这个例子我想找到“2”存在并检查它的数据是否与我正在寻找的相匹配。 我怎么能在LINQ中做到这一点?

4 个答案:

答案 0 :(得分:3)

元组列表中的键不是唯一的,首先你可能想要使用

Dictionary<string, string>()

但是如果你想保留列表

_list1.Where( t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor );

答案 1 :(得分:3)

如果您使用的是C#6(并且每个元组都有一个唯一的键值):

bool exists = _list1.SingleOrDefault(t => t.Item1 == keyToLookFor)?.Item2 == valueToLookFor;

如果您的列表可以包含多个具有相同键值的元组:

bool exists = _list1.Any(t => t.Item1 == keyToLookFor && t.Item2 == valueToLookFor);

答案 2 :(得分:3)

HashSet可以解决问题(它可以处理重复)。值得注意的是,HashSets专为高性能集合操作而设计。如果你的list1非常大和/或你将对它进行频繁的查找,你应该使用HashSet。

List<Tuple<string, string>> list1 = new List<System.Tuple<string, string>>();
list1.Add(new Tuple<string, string>("1", "data1"));
list1.Add(new Tuple<string, string>("2", "data2"));
list1.Add(new Tuple<string, string>("2", "data3"));
list1.Add(new Tuple<string, string>("2", "data3")); //duplicate
list1.Add(new Tuple<string, string>("3", "data3"));

var hs  = new HashSet<Tuple<string, string>>(list1);

var toCheck = new Tuple<string,string>("2","data3");
Console.WriteLine(hs.Contains(toCheck)); //True
toCheck = new Tuple<string,string>("2","data7");
Console.WriteLine(hs.Contains(toCheck)); //False

答案 3 :(得分:0)

您可能应该使用字典,而不是您所描述的内容都是

Dictionary<string,string> _list1 = new Dictionary<string,string>();
if(_list1.containsKey(keyToLookFor)) {
   return _list1[keyToLookFor] == valueToLookFor;
}