web-dev-qa-db-fra.com

GroupBy dans les expressions lambda

from x in myCollection
    group x by x.Id into y
    select new { 
       Id = y.Key, 
       Quantity = y.Sum(x => x.Quantity)
    };

Comment écririez-vous ce qui précède comme une expression lambda? Je suis coincé dans la partie group into.

21
fearofawhackplanet

Les continuations de requêtes (sélectionner ... dans et grouper ... dans, mais pas joindre ... dans) équivalent à simplement diviser l'expression de requête. Donc, j'aime penser à votre exemple en tant que:

var tmp = from x in myCollection
          group x by x.Id;
var result = from y in tmp
             select new { 
               Id = y.Key, 
               Quantity = y.Sum(x => x.Quantity)
             };

Changez ceux-ci en notation par points:

var tmp = myCollection.GroupBy(x => x.Id);
var result = tmp.Select(y => new { 
               Id = y.Key, 
               Quantity = y.Sum(x => x.Quantity)
             });

Ensuite, vous pouvez les combiner:

var tmp = myCollection.GroupBy(x => x.Id)
                      .Select(y => new { 
                                Id = y.Key, 
                                Quantity = y.Sum(x => x.Quantity)
                              });

Une fois que vous avez compris ce que fait le compilateur C # avec les expressions de requête, le reste est relativement simple :)

46
Jon Skeet
myCollection.GroupBy(x => x.Id)
            .Select(y => new {
                                 Id = y.Key,
                                 Quantity = y.Sum(x => x.Quantity)
                             });
7
LukeH
myCollection
    .GroupBy(x => x.Id)
    .Select(x => 
        new 
        { 
          Id = x.Key, 
          Quantity = x.Sum(y => x.Quantity
        });
5
Femaref
        var mostFrequent =
            lstIn.Where(i => !string.IsNullOrEmpty(i))
                 .GroupBy(s => s)
                 .OrderByDescending(g => g.Count())
                 .Select(s => s.Key)
                 .FirstOrDefault();
1
Drunken Code Monkey