用LINQselect一个字典<T1,T2>
我已经使用“select”关键字和扩展方法返回一个IEnumerable<T>
与LINQ,但我有一个需要返回一个通用的Dictionary<T1, T2>
并不能算出来。 我从这个例子中学到了一个类似于以下forms的东西:
IEnumerable<T> coll = from x in y select new SomeClass{ prop1 = value1, prop2 = value2 };
我也用扩展方法做了同样的事情。 我假定由于Dictionary<T1, T2>
中的项可以迭代为KeyValuePair<T1, T2>
,所以我可以用上面的例子中的“SomeClass”replace为“ new KeyValuePair<T1, T2> { ...
” ,但没有奏效(Key和Value被标记为只读,所以我无法编译此代码)。
这是可能的,还是我需要多个步骤做到这一点?
谢谢。
扩展方法也提供了一个ToDictionary扩展。 使用起来相当简单,一般的用法是为键传递一个lambdaselect器,并将该对象作为值,但是可以为键和值传递一个lambdaselect器。
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]
将包含值“你好”
var dictionary = (from x in y select new SomeClass { prop1 = value1, prop2 = value2 } ).ToDictionary(item => item.prop1);
假设SomeClass.prop1
是字典所需的Key
。
KeyValuePair
的集合更加明确,执行得非常好。
Dictionary<int, string> dictionary = objects .Select(x=> new KeyValuePair<int, string>(x.Id, x.Name)) .ToDictionary(x=>x.Key, x=>x.Value);