2017-01-28 2 views
0

Ich möchte einfach diese SQL in Linq tun. Aber wie?Linq Gruppe von und nach der Reihenfolge

Select Id, sum(Count) 
from dbo.BThread 
group by Id 
order by sum(Count) desc 

Ich habe versucht, diese und seine versagt: das Ergebnis nur eine Zeile gibt. Ich erwarte viel mehr Zeilen als das. Es gibt viele IDs, auf die ich zählen muss.

var List = (from tbBThread in context.BThread.Take(10) 
       group tbBThread by tbBThread.Id into bTmp 
       orderby bTmp.Sum(x => x.Count) 
       select new BViewModel 
       { 
        Id = bTmp.Key, 
        Id = bTmp.First().Id, 
        Count = bTmp.Sum(x => x.Count) 
       }).ToList(); 
+0

Entfernen Sie die zweite Id = bTmp.First(). Id, ' – Slai

+0

Könnten Sie erklären, was das Problem ist? – SeduceAdmin

+0

Ich weiß nicht, was das Problem ist, weil Sie nur erwähnen, dass es ohne Details fehlschlägt, was fehlschlägt (Hinweis: fügen Sie weitere Details zu der Frage), aber Sie können nicht 2 'Id' in der Auswahl – Slai

Antwort

0

Take(10) am Ende der Anfrage sein sollte.

var List = (from tbBThread in context.BThread 
      group tbBThread by tbBThread.Id into bTmp 
      orderby bTmp.Sum(x => x.Count) 
      select new BViewModel 
      { 
       Id = bTmp.Key, 
       Count = bTmp.Sum(x => x.Count) 
      }).Take(10).ToList(); 

Ansonsten werden nur die Sie bei den ersten 10 Elemente Ihrer context.BThread, die die gleiche Id zu haben scheinen aussehen und damit in die gleiche Gruppe gehen.

Und (wie Slai bereits in den Kommentaren gesagt) entfernen Sie die zweite Id = bTmp.First().Id,.

+0

Thanks. Jetzt habe ich die Lösung .. – SeduceAdmin