Расширение WCF REST для IEnumerable Lambda Func <TSource, TKey> keySelector - PullRequest
0 голосов
/ 28 августа 2009

Я использую WCF REST Preview 2 для тестирования некоторых служб REST. Пакет имеет расширение IEnumerable как ToDictionary (Func (TSource, TKey) keySelctor. Не знаете, как определить лямбда-функцию для возврата 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

Не уверен, какой должна быть лямбда-функция для возврата KeySelector?

1 Ответ

1 голос
/ 28 августа 2009

Поскольку элементы имеют тип IEnumerable<MyClass>, вы должны быть в состоянии сделать следующее:

items.ToDictionary(x => x.Name)

Вы могли бы даже сделать:

entity.Instances.ToDictionary(x => x.Name)

Вам не нужно указывать параметры типа, поскольку они могут быть правильно определены.

Edit:

items.ToDictionary(x => x.Name) на самом деле неверно, потому что items не относится к типу IEnumerable<MyClass>. На самом деле это IEnumerable типа anonymouse, который имеет 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, если все, что вы пытаетесь сделать, - это создать словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...