关于 c#:WCF REST 对 IEnumerable Lambda Func<TSource, TKey> keySelector 的扩展

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,
                              item => item.Instance);

在这种情况下,第二个例子更容易使用。本质上,如果您想要做的只是生成一个字典,那么您不会从 linq 查询中获得任何值来获取 items