我正在使用WCF REST预览2来测试一些REST服务。该包具有IEnumerable的扩展名为ToDictionary(Func(TSource,TKey)keySelctor。不确定如何定义lambda函数以返回keySelector?
以下是一个例子:
var items = from x in entity.Instances // a customized Entity class with list instances of MyClass
select new { x.Name, x};
Dictionary<string, MyClass> dic = items.ToDictionary<string, MyClass>(
(x, y) => ... // what should be here. I tried x.Name, x all not working
不确定lambda Func应该返回一个KeySelector?
答案 0 :(得分:1)
由于项目类型为IEnumerable<MyClass>
,您应该能够执行以下操作:
items.ToDictionary(x => x.Name)
你甚至可以做到:
entity.Instances.ToDictionary(x => x.Name)
您无需指定类型参数,因为可以正确推断它们。
编辑:
items.ToDictionary(x => x.Name)
实际上不正确,因为items
不属于IEnumerable<MyClass>
类型。它实际上是anonymouse类型的IEnumerable
,它有2个属性(Name
,其中包含myClass.Name
属性,x
,类型为MyClass
})。
在这种情况下,假设你可以这样做:
var items = from instance in entity.Instances
select new { Name = instance.Name, // don't have to specify name as the parameter
Instance = instance
};
var dict = items.ToDictionary(item => item.Name,
item => item.Instance);
在这种情况下,第二个示例更容易使用。从本质上讲,如果您要做的只是生成字典,则不会从linq查询中获取任何值来获取items
。