LINQ with list <int>查询字典的值<int,object =“”> </int,> </int>

时间:2014-02-16 16:39:56

标签: linq list dictionary

我的查询有问题。我有一个带有int的List,并希望用它来从我的字典中获取值。 dictionary-keys是int,其中一些具有list-items的值。我的问题是我是如何从字典中获取对象的,那些键可以匹配列表项。编程JAVA是最近几年,现在正在努力与LINQ :(

提前致谢

问题解决了。谢谢你们 :) 不知道如何关闭这个话题。我读了一年以来的stackoverflow,但这是我的第一篇文章。

2 个答案:

答案 0 :(得分:1)

您可以使用Linq通过条目键上的字典KeyValuePair条目来连接列表项。然后从每个连接对中选择条目值:

var values = from l in list
             join kvp in dictionary on l equals kvp.Key
             select kvp.Value;

Lambda语法:

var values = list.Join(dictionary, l => l, kvp => kvp.Key, (l,kvp) => kvp.Value);

答案 1 :(得分:0)

基本上:

var value = dictionary[integerKey];

或者:

if (dictionary.TryGetValue(integerKey, out value)) {

}

您还可以创建扩展方法:

public static class DictionaryExtensions
{
    public static IEnumerable<TValue> FilterValuesBy<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IEnumerable<TKey> filter)
    {
        if (dictionary == null) throw new ArgumentNullException("dictionary");
        if (filter == null) throw new ArgumentNullException("filter");
        var coll = filter as ICollection<TKey> ?? new HashSet<TKey>(filter);

        return dictionary.Where(kvp => coll.Contains(kvp.Key)).Select(kvp => kvp.Value); 
    }
}

用法:

class Program
{
    static void Main()
    {
        var dict = Enumerable.Range(0, 10).ToDictionary(x => x);
        var filter = Enumerable.Range(0, 2);

        foreach (var i in dict.FilterValuesBy(filter))
        {
            Console.WriteLine(i);
        }

        Console.ReadLine();
    }
}

简单的Linq方法链:

        var dict = Enumerable.Range(0, 10).ToDictionary(x => x);
        var filter = Enumerable.Range(0, 2).ToList();

        var filtered = dict.Where(x => filter.Contains(x.Key)).Select(x => x.Value).ToList();