2010-07-24 3 views
0

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

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

либо SQL или решение LINQ будет гораздо appriciated

alt text http://preview.robson-brown.com/capture.png

+0

Так что, учитывая данные вашего примера, какой вы хотите, чтобы ваш пример был? –

+1

Как вы оцениваете прогнозы? –

+0

извините, да выход! все, что я хочу, это gameId, который будет выводиться , используя данные примера, мы можем видеть, что играId 5 обе имеют 5 домашних побед и 5 прочь побед, предсказанных (в его сценарии я бы выбрал наивысшую рейтинговую команду, чтобы быть фаворитом, это не так о возможности для этого вопроса, я думаю), так как я не хочу, чтобы gameId 5 возвращался дважды, –

ответ

2

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

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

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

+0

спасибо tvanfosson, вы ответили на что-то, что я пропустил, да, я бы хотел получить самое согласованное предсказание, я проверю, как вы ответите и ответите! спасибо –

+0

спасибо tvanfosson ваше решение отлично работает –