2009-12-08 8 views
2

Comment utiliser les méthodes d'extension pour former la deuxième requête en tant que première.C# Linq -Extension, méthode

1) var query = from cm in cust 
       group cm by cm.Customer into cmr 
       select (new { CKey = cmr.Key, Count = cmr.Count() }); 

(deuxième requête est pas bien formé)

2) var qry = cust.GroupBy(p => p.Customer). 
       Select(new { CKey = p.Key, Count = p.Count }); 

Répondre

12

Essayez ceci:

var query = cust.GroupBy(p => p.Customer) 
       .Select(g => new { CKey = g.Key, Count = g.Count() }); 

Vous pouvez également simplifier cela en un seul appel à this GroupBy overload si:

var query = cust.GroupBy(p => p.Customer, 
         (key, g) => new { CKey = key, Count = g.Count() }); 

Notez que j'ai changé le nom du paramètre de l'expression lambda pour la deuxième ligne en g - Je crois que cela donne plus d'indices que vous regardez vraiment un groupe plutôt qu'une seule entité.

J'ai également déplacé le point sur la deuxième ligne sous la forme qui utilise toujours Select - Je trouve que cela facilite la lecture de la requête; J'aligne habituellement les points, par ex.

var query = foo.Where(...) 
       .OrderBy(...) 
       .GroupBy(...) 
       .Select(...) 
+0

Jon Merci pour la suggestion. – Udana

+0

Jon, Vous voulez dire que l'ordre pourrait être où ... OrderBy ... GroupBy .., non? – Udana

+2

Il veut dire que séparer tous les tags comme .where. sélectionnez en lignes séparées afin que ce soit facile à lire :) –

2

Je pense que vous avez besoin:

var qry = cust.GroupBy(p => p.Customer) 
    .Select(grp => new { CKey = grp.Key, Count = grp.Count() });