WCF REST’s Extention to IEnumerable Lambda Func<TSource, TKey> keySelector
我正在使用 WCF REST Preview 2 来测试一些 REST 服务。该包具有对 IEnumerable 的扩展为 ToDictionary(Func(TSource, TKey) keySelctor。不确定如何定义 lambda 函数以返回 keySelector?
这是一个例子:
1
2 3 4 |
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 |
不确定返回 KeySelector 的 lambda Func 应该是什么?
由于 items 是 IEnumerable<MyClass> 类型,您应该能够执行以下操作:
1
|
items.ToDictionary(x => x.Name)
|
你甚至可以做到:
1
|
entity.Instances.ToDictionary(x => x.Name)
|
你不需要指定类型参数,因为它们可以被正确推断。
编辑:
items.ToDictionary(x => x.Name) 实际上是不正确的,因为 items 不是 IEnumerable<MyClass> 类型。它实际上是一个匿名类型的 IEnumerable,它有 2 个属性(Name,它包含 myClass.Name 属性,和 x,它的类型是 MyClass)。
在这种情况下,假设你可以这样做:
1
2 3 4 5 6 7 |
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, |
在这种情况下,第二个例子更容易使用。本质上,如果您想要做的只是生成一个字典,那么您不会从 linq 查询中获得任何值来获取 items。
来源:https://www.codenong.com/1343800/