2009-03-31 4 views
0

Wie würde die folgende SQL-Abfrage aussehen, wenn sie in linq übersetzt wird?Wie sieht diese SQL-Abfrage (w count und group by) aus, wenn sie in linq übersetzt wird?

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

Ich habe versucht, die folgenden:

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 
}; 

aber es löst eine Ausnahme auf Aufzählung darauf hinweist, dass es keine db-Funktion mit einer Abbildung ist dem Namen ‚Key‘. Ich benutze LLBLGen in dieser bestimmten App und ich vermute, dass dort das Problem liegt. Ich möchte überprüfen, ob meine linq-Syntax korrekt ist, bevor ich anfange zu graben. Wer sieht etwas falsch?

Antwort

3

Try this:

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

, die als Sie fast das gleiche ist, aber Ihre Count in einer anderen Art und Weise erhalten, die mir falsch aussieht.

Wenn LLBLGen nicht IGrouping.Key obwohl nicht versteht, könnte es schwierig sein ...

Um zu überprüfen, ob Ihre LINQ-Syntax korrekt ist oder nicht, würde ich eine sehr einfache In-Memory-Liste empfehlen den Aufbau zu verwenden, dein Tisch. Hier ist ein Beispiel:

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); 
     } 
    } 
} 

Dies sieht aus, als ob es die richtigen Ergebnisse zu mir gibt.

+0

Haha, tatsächlich war mein Weg seltsam. Das funktioniert wie ein Zauber. Danke Jon –