2016-07-12 11 views
2

Ich versuche das "populärste" Spiel basierend auf der Anzahl der Vorkommen zu finden. Also schrieb ich eine Linq-Abfrage, wie untenLINQ findet die höchste Frequenz

var query = (from evt in events 
         from game in evt.EventGames 
         group game by game.GameTypeId 
         into g 
         select new {g.Key, Count = g.Count()}).OrderByDescending(x => x.Count).FirstOrDefault(); 

var gameType = repository.GetRepository<GameType>().Find(query?.Key); 

Ich erkennen, dass ich zweimal am Abfrage die Spielart zu erhalten, die die höchste Frequenz hat.

Ist es möglich, den Spieltyp von der ersten Abfrage selbst zu erhalten?

-Alan-

+3

Ja, gruppieren Sie einfach durch 'GameType' anstelle von' GameTypeId'. – juharr

Antwort

1

Ja, gerade Gruppe der GameType anstelle des GameTypeId.

var gameType = (from evt in events 
       from game in evt.EventGames 
       group game by game.GameType into g 
       orderby g.Count() descending 
       select g.Key) 
       .FirstOrDefault(); 
+0

genau was ich will. Vielen Dank. Und var gameType = query, würde ich ohne den Schlüssel raten. –

+0

@AlanB Ja, ich habe ein paar Änderungen vorgenommen und das nicht behoben. Aber jetzt habe ich. – juharr

0

Sie wollen also alle GameTypes finden, die am häufigsten erscheinen?

var gameTypeGroups = from evt in events 
         from game in evt.EventGames 
         group game by game.GameTypeId 
         into g 
         orderby g.Count() descending 
         select repository.GetRepository<GameType>().Find(g.Key); 
IEnumerable<GameType> maxCountGroup = gameTypeGroups.FirstOrDefault();