2010-07-24 6 views
0

ci-dessous est une table de serveur SQL, qui est utilisée pour contenir la prédiction des utilisateurs pour les matchs de football. un utilisateur peut prédire une victoire à domicile, une victoire à l'extérieur ou un match nul/une égalité pour un match de football spécifique.Requête SQL à LINQ simple?

comment puis-je interroger ce tableau pour trouver les 3 meilleures prédictions, les 3 meilleurs jeux doivent être

de gameid distincts

soit SQL ou d'une solution LINQ serait beaucoup appriciated

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

+0

Donc, compte tenu de vos données d'exemple, que voulez-vous que votre exemple de sortie soit? –

+1

Comment classer les prédictions? –

+0

désolé, oui la sortie! tout ce que je veux, c'est le gameId à sortir en utilisant les données d'exemple, nous pouvons voir gameId 5 ont tous les deux 5 victoires à domicile et 5 victoires à l'extérieur prévues, (dans son scénario je choisirais l'équipe la mieux notée pour être le favori, c'est dehors de portée pour cette question je suppose) comme je ne veux pas gameId 5 à retourner deux fois, –

Répondre

2

Je vais supposons que vous voulez les prédictions les plus fortes, c'est-à-dire les jeux où le plus grand nombre de personnes sont d'accord sur le résultat.

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

Vous pourriez être en mesure de combiner les deux sélections, mais l'OMI, il nuirait à la lisibilité du code.

+0

merci tvanfosson vous avez répondu quelque chose que j'ai raté, oui je voudrais la prédiction la plus acceptée, je vais tester votre réponse et rapport! merci –

+0

merci tvanfosson votre solution fonctionne très bien –