2009-08-27 3 views
0

J'utilise WCF REST Preview 2 pour tester certains services REST. .? Le paquet a une extension IEnumerable comme ToDictionary (Func (TSource, TKey) keySelctor Je ne sais pas comment définir une fonction lambda pour revenir keySelectorExtension de WCF REST à Iounumerable Lambda Func <TSource, TKey> keySelector

Voici un exemple:

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 

Je ne sais pas ce qui devrait ? être le lambda Func doit être retourner un KeySelector

Répondre

1

Puisque les articles est de type IEnumerable<MyClass>, vous devriez être en mesure de faire ce qui suit:

items.ToDictionary(x => x.Name) 

Vous pourriez même avoir fait:

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

Vous n'avez pas besoin de spécifier les paramètres de type, car ils peuvent être inférées correctement.

Edit:

items.ToDictionary(x => x.Name) est en fait inexact, car items est pas de type IEnumerable<MyClass>. C'est en fait un IEnumerable du type anonymouse, qui a 2 propriétés (Name, qui contient la propriété myClass.Name, et x, qui est de type MyClass).

Dans ce cas, vous pouvez le faire en supposant:

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); 

Le deuxième exemple est un peu plus facile à utiliser dans ce cas. Essentiellement, vous n'obtiendrez aucune valeur de la requête linq pour obtenir items, si tout ce que vous essayez de faire est de générer un dictionnaire.

+0

Merci. Ça marche. –

Questions connexes