2009-12-31 3 views
4

contiennent des données comme celui-ciComment grouperPar linq en sql? Je

id = 1<pk> 
SDate = 12/12/2009 
EDate = 12/12/2009 
binding = a_1 
userid = 14 

id = 2<pk> 
SDate = 12/12/2009 
EDate = 12/12/2009 
binding = a_1 
userid = 14 

Je veux regrouper mes données en se liant. Je ne suis pas sûr de savoir comment faire cela. Dois-je faire un nouveau choix pour le faire?

jusqu'à présent j'avoir cette

Db.Table.Where(u => u.UserId == userId && u.Binding == binding) 
       .GroupBy(u => u.Binding) 

Je veux retourner toutes les colonnes. Dois-je aller

.select(group = new Table {....}); 

Répondre

5

Rappelez-vous que GroupBy de Linq est pas comme GroupBy de SQL. Le GroupBy de Linq renvoie un .Key (qui correspond à votre groupe par condition), puis un IEnumerable <> de tout ce que vous regroupez. Donc, si vous vouliez un compte de toutes les lignes pour chaque liant à côté de la liaison elle-même, ce serait:

var bindingsAndCounts = 
    Db.Table.Where(u => u.UserId == userId && u.Binding == binding) 
       .GroupBy(u => u.Binding) 
       .Select(g => new {g.Key, BindingCount = g.Count()}); 

Ceci est beaucoup plus puissant d'une construction qu'avec SQL parce que vous pouvez faire à peu près tout avec "g" dans l'expression.

Si vous voulez énumérer chaque groupe, vous pouvez omettre la sélection:

foreach (var group in whateveryourgroupingExpressionWas) { 
    Console.WriteLine(group.Key); 
    foreach (var row in group) { 
     Console.WriteLine("ID: " + row.Id + "Name " + row.Name ...); 
    } 
} 
+0

Hmm je ne savais pas que. mais dans votre cas, vous n'utilisez pas le groupBy vous utilisez select. – chobo2

+0

C'est après .GroupBy(). Select() –

+0

Donc, j'utiliser mon groupe par J'ai déjà si loin, puis ajouter un select similaire à ci-dessus? – chobo2