选择字典<T1,T2>使用LINQ

我在LINQ中使用了“ select ”关键字和扩展方法来返回一个IEnumerable<T>,但是我需要返回一个泛型Dictionary<T1, T2>,但我无法解决这个问题。我从中学到的示例使用了类似于以下形式的内容:

IEnumerable<T> coll = from x in y
select new SomeClass{ prop1 = value1, prop2 = value2 };

我也对扩展方法做了同样的事情。我假设,由于Dictionary<T1, T2>中的项可以迭代为KeyValuePair<T1, T2>,因此我可以将上面示例中的“ SomeClass ”替换为“new KeyValuePair<T1, T2> { ... ”,但这不起作用(键和值被标记为只读,因此我无法编译此代码)。

这是否可能,或者我是否需要在多个步骤中执行此操作?

谢谢。

169929 次浏览

扩展方法还提供到字典扩展。它使用起来相当简单,一般用法是为键传递lambda选择器并获取对象作为值,但您可以为键和值同时传递lambda选择器。

class SomeObject
{
public int ID { get; set; }
public string Name { get; set; }
}


SomeObject[] objects = new SomeObject[]
{
new SomeObject { ID = 1, Name = "Hello" },
new SomeObject { ID = 2, Name = "World" }
};


Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);

objectDictionary[1]将包含值“ Hello ”。

var dictionary = (from x in y
select new SomeClass
{
prop1 = value1,
prop2 = value2
}
).ToDictionary(item => item.prop1);

假设SomeClass.prop1是字典所需的Key

更明确的选项是将集合投影到__为ABC0的IEnumerable,然后将其转换为字典。

Dictionary<int, string> dictionary = objects
.Select(x=> new KeyValuePair<int, string>(x.Id, x.Name))
.ToDictionary(x=>x.Key, x=>x.Value);