Linq查询字典列表中的值

时间:2014-02-11 14:19:06

标签: c# linq

我有一个Dictionary<string, string>和另一个List<string>。我想要实现的是一个linq查询,用于从字典中获取所有项目,其中来自所述字典的任何值都在List<string>中。

我发现这篇文章很有用,LINQ querying a Dictionary against a List。并且能够编写以下linq表达式,但是我的结果实际上从未返回任何内容。

到目前为止我有什么。

Data是字典,PersonList是字符串列表。

var Persons = PersonList.Where(x => Data.ContainsKey(x))
                        .Select(z => new { key = z, value = Data[z] })
                        .ToList();

3 个答案:

答案 0 :(得分:30)

您在寻找吗?如果您正在寻找,请使用

var Persons = Data.Where(kvp => PersonList.Contains(kvp.Value))
                  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

如果您真的想要密钥,那么您的代码应该可以运行,但另一种选择是:

var Persons = Data.Where(kvp => PersonList.Contains(kvp.Key))
                  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

答案 1 :(得分:5)

试试这个:

var Persons = Data.Where(x=>PersonList.Contains(x.Value))
                  .Select(x=>new { key=x.Key, value=x.Value})
                  .ToList();

我将结果转换为列表,因为我注意到您在代码中使用了它。如果你想要它到字典,只需看看D Stanley提供的答案。

答案 2 :(得分:1)

我认为您不必将其转换为ToDictionary,因为您的源是字典:

var Persons = Data.Where(kvp => personList.Contains(kvp.Key))
            .Select(x => x);

我很快在LinqPad中对它进行了测试,但如果这是一个坏主意或者我错了,请发表评论。