2010-07-24 167 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