SQL для LINQ простой запрос? - PullRequest
0 голосов
/ 24 июля 2010

ниже - таблица sql server, которая используется для хранения прогноза пользователей на футбольные матчи. пользователь может предсказать либо домашний выигрыш, либо выездной, либо ничью / ничью для конкретного футбольного матча.

как я могу запросить эту таблицу, чтобы найти 3 верхних прогноза, 3 лучшие игры должны быть разными gameId

решение SQL или LINQ будет очень ценным

альтернативный текст http://preview.robson -brown.com / capture.png

1 Ответ

2 голосов
/ 24 июля 2010

Полагаю, вам нужны самые строгие прогнозы, т. Е. Игры, в которых большинство людей согласны с результатом.

 var predictions = db.Predictions
                     .GroupBy( g => g.gameId )
                     .Select( g => new 
                      {
                            gameId = g.Key,
                            homeWin = g.Sum( h => h.homeWin ),
                            awayWin = g.Sum( a => a.awayWin ),
                            draw = g.Sum( d => d.draw )
                      })
                     .Select( g => new 
                      {
                            gameId = g.gameId,
                            prediction = g.homeWin > g.awayWin 
                                             ? (g.homeWin > draw 
                                                    ? 'homeWin'
                                                    : 'draw')
                                             : (g.awayWin > g.draw
                                                    ? 'awayWin'
                                                    : 'draw'),
                            strength = g.homeWin > g.awayWin 
                                             ? (g.homeWin > draw 
                                                    ? g.homeWin
                                                    : g.draw) 
                                             : (g.awayWin > g.draw 
                                                    ? g.awayWin 
                                                    : g.draw)
                      })
                     .OrderByDescending( g => g.strength )
                     .Take(3);

Возможно, вам удастся объединить два варианта, но для ИМО это повредитудобочитаемость кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...