2010-07-24 169 views
0

下面是一個sql服務器表,用於保存用戶對足球比賽的預測。用戶可以預測主場勝利,客場勝利或特定足球比賽的平局/平局。SQL到LINQ簡單查詢?

我如何可以查詢該表找到前3名的預測,前3場比賽必須是不同的遊戲ID的

SQL或LINQ的解決方案將大大appriciated

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

+0

因此,給定您的示例數據,您希望您的示例輸出是什麼? – 2010-07-24 13:17:11

+1

你如何排名預測? – 2010-07-24 13:18:09

+0

對不起,是的輸出!所有我想要的是gameId被輸出 使用示例數據我們可以看到gameId 5都有5個主勝和5個客場勝預測,(在他的情況下,我會選擇最高評級的球隊成爲最喜歡的,這是出這個問題的範圍,我猜)因爲我不希望gameId 5被返回兩次, – 2010-07-24 13:39:02

回答

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

您可能可以結合這兩個選擇,但IMO會損害代碼的可讀性。

+0

謝謝你tvanfosson你回答了我錯過了,是的,我想要最一致的預測,我會測試你的回答和報告回!謝謝 – 2010-07-24 13:49:57

+0

感謝tvanfosson你的解決方案效果很好 – 2010-07-24 20:31:10