我有一个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();
答案 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中对它进行了测试,但如果这是一个坏主意或者我错了,请发表评论。