2009-03-31 6 views
0

A quoi ressemblerait la requête sql suivante lorsqu'elle serait traduite en linq?À quoi ressemblerait cette requête sql (w count et group by) traduite en linq?

SELECT 
    myId, Count(myId) 
FROM MyTable 
GROUP BY myId 

J'ai essayé ce qui suit:

var q = from a in db.MyTable 
group a by a.Id into g 
let count = g.Count() 
select new 
{ 
    Count = Id, 
    Key= g.Key 
}; 

mais elle soulève une exception sur l'énumération indiquant qu'il n'y a pas de fonction db avec un mappage nommé « clé ». J'utilise LLBLGen sur cette application particulière et je suspecte que c'est là que le problème est enraciné. Je veux vérifier que ma syntaxe linq est correcte avant de commencer à creuser. Quelqu'un voit quelque chose de mal?

Répondre

3

Essayez ceci:

var q = from a in db.MyTable 
     group a by a.Id into g 
     select new { Id=g.Key, Count=g.Count() }; 

C'est à peu près le même que le vôtre, mais votre Count est obtenu d'une manière différente qui semble mal pour moi.

Si LLBLGen ne comprend pas IGrouping.Key cependant, il pourrait être difficile ...

Pour vérifier si votre syntaxe LINQ est correcte ou non, je vous recommande la construction d'une liste en mémoire très simple à utiliser ta table. Voici un exemple:

using System; 
using System.Collections.Generic; 
using System.Linq; 

class Test 
{ 
    static void Main() 
    { 
     var data = new[] { 
      new { Id="X", Name="Jon" }, 
      new { Id="Y", Name="Marc" }, 
      new { Id="X", Name="Holly" }, 
     }; 

     var query = from a in data 
        group a by a.Id into g 
        select new { Id=g.Key, Count=g.Count() }; 

     foreach (var entry in query) 
     { 
      Console.WriteLine(entry); 
     } 
    } 
} 

Cela ressemble à donner les bons résultats pour moi.

+0

Haha, en effet, mon chemin était étrange. Cela fonctionne comme un charme. Merci Jon –