2010-07-24 6 views
0

아래는 SQL Server 테이블이며 사용자가 축구 경기에 대한 예측을 유지하는 데 사용됩니다. 사용자는 특정 축구 경기에 대해 홈 우승, 어웨이 우승 또는 무승부/동점을 예측할 수 있습니다.SQL to LINQ 간단한 쿼리?

은 내가 어떻게 상위 3 예측을 찾기 위해이 테이블을 조회 할 수 있습니다, 상위 3 게임을해야 별개의 게임 ID의

SQL 또는 LINQ 솔루션 중 하나가 훨씬 appriciated 될 것이다

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

+0

예제 데이터가 주어지면 예제 출력은 무엇입니까? –

+1

어떻게 예측 순위를 매기십니까? –

+0

죄송합니다, 예 출력! 내가 원하는 모든 것은 gameId가 출력 될 것입니다 우리가 볼 수있는 예제 데이터를 사용하여 gameId 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); 

두 개의 선택을 결합 할 수는 있지만 IMO는 코드의 가독성을 해칠 수 있습니다.

+0

감사합니다 tvanfosson 당신이 내가 놓친 것을 대답했습니다. 예, 가장 동의 한 예측을 원할 것입니다. 감사합니다 –

+0

감사합니다 tvanfosson 솔루션은 위대한 작품 –