我的查询有问题。我有一个带有int的List,并希望用它来从我的字典中获取值。 dictionary-keys是int,其中一些具有list-items的值。我的问题是我是如何从字典中获取对象的,那些键可以匹配列表项。编程JAVA是最近几年,现在正在努力与LINQ :(
提前致谢
问题解决了。谢谢你们 :) 不知道如何关闭这个话题。我读了一年以来的stackoverflow,但这是我的第一篇文章。
答案 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();
}
}
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();