WCF REST扩展到IEnumerable Lambda Func <tsource,tkey =“”> keySelector </tsource,>

时间:2009-08-27 21:23:14

标签: c# rest wcf

我正在使用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?

1 个答案:

答案 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