如何在Dict <int,list <tuple <string,string >>>中查找键,以便列表包含具有给定Item1和Items的元素

时间:2019-02-06 08:21:08

标签: c# linq dictionary

我有一个Dictionary<int, List<Tuple<string, string>>> L,我想在其中找到所有键,以便相应的值List<Tuple<string, string>>具有元组,使得Item1和Item2等于某些给定值“ toto”,并且“塔塔”。

我尝试如下:

var res = L.Where(x => x.Value.ToList().Where(y => y.Item1 == "toto" && 
                           (string) y.Item2 == "tata").Any()).Select(x => x.Key).ToList();

我对代码行中的错误处理不满意:Where的某些中间结果是null等。实现此目的的普通c#方法是什么?

1 个答案:

答案 0 :(得分:4)

这应该有效。

var d = new Dictionary<int, List<Tuple<string, string>>>();

...

var keys = d.Where(x => x.Value.Any(y => y.Item1 == val1 && y.Item2 == val2))
            .Select(x => x.Key);

如果您担心空列表

var keys = d.Where(x => x.Value != null && x.Any(y => y.Item1 == val1 && y.Item2 == val2))
            .Select(x => x.Key);

或者使用更好的名称Tuples

var d = new Dictionary<int, List<(string val1, string val2)>();

...

var keys = d.Where(x => x.Value != null && x.Value.Any(y => y.val1 == val1 && y.val2 == val2))
            .Select(x => x.Key);