2013-09-03 5 views
1

Comment traduiriez-vous spécifiquement la partie select de cette expression linq en lambda?Traduction en expression lambda

var query2 = from method in typeof(double).GetMethods() // integrated method c# reflection 
      orderby method.Name 
      group method by method.Name into groups 
      select new { MethodName = groups.Key, NumberOfOverloads = groups.Count()}; 

Jusqu'à présent, j'ai ceci:

var methods = typeof(double).GetMethods(); 
var query3 = methods.OrderBy(x => x.Name).GroupBy(y => y.Name); 

J'ai essayé pour la sélection mais j'obtiens des erreurs compilor.

var query3 = methods.OrderBy(x => x.Name).GroupBy(y => y.Name) 
.Select<new { MethodName = groups.Key, NumberOfOverloads = groups.Count()}>(); 

Apprécierait l'aide merci.

+1

Les règles exactes pour la traduction des compréhensions de requêtes en syntaxe fluide peuvent être trouvées dans la spécification C#. –

Répondre

7

Ceci est la traduction exacte. Je ne sais pas pourquoi vous avez besoin OrderBy tho, étant donné que vous n'utilisez pas les éléments dans le Select

var methods = typeof(double).GetMethods() 
    .OrderBy(x=>x.Name) 
    .GroupBy(x=>x.Name) 
    .Select(x=> new { MethodName = x.Key, NumberOfOverloads = x.Count()}); 

Le même résultat est obtenu par

var methods = typeof(double).GetMethods() 
.GroupBy(x=>x.Name) 
.Select(x=> new { MethodName = x.Key, NumberOfOverloads = x.Count()}); 

et vous faire gagner du temps de calcul puisque vous don Il ne faut pas commander la collection.

+0

merci, j'essayais de comprendre les opérateurs linq. Connaissez-vous des ressources en ligne qui les expliquent bien? –

+0

Ce qui a fait la différence pour moi, c'est le livre C# in Depth de Jon Skeet, mais vous devrez l'acheter. Vous pouvez trouver du matériel sur son [blog] (http://msmvps.com/blogs/jon_skeet/) mais je ne pense pas que ce soit si facile à comprendre pour les "débutants" LINQ – Save