|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Bonjour,
Je suis nouveau en Linq et je n'arrive pas à transformer ma requête SQL initiale. Du coup je vous mets la solution ultra lente et ultra non-optimisée pour que vous compreniez bien ce que j essaye de faire. Le but c'est de sélectionner tous les matches de ma table Matches ou j'ai un certain Player présent soit en tant que Player1 ou en tant que Player2. Table Matches(IdPlayer1, IdPlayer2, Date, ..) Table Ratings(IdPlayer, DateRanking, Position) Donc la liste des matches récupérées contiendra ce joueur soit dans le champ player1 ou dans le champ Player2 et son adversaire dans le champ opposé. Code c# :
Ensuite j'ai donc une table Ratings qui contient le classement de chaque joueur pour chaque semaine de l année. Pour chacun des 2 joueurs de chaque match sélectionné j aurais donc souhaité pouvoir récupérer son classement . Ce que je fais donc(car je n arrive pas a tout faire dans la meme requete) en parcourant ma liste de matches récupérés par la 1e requete et pour chaque match je vais chercher dans ma table Rating par r1 et r2. Code c# :
J'espère que c'est clair et merci par avance. |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
Est-ce que ça correspond à ce que tu veux ?
Code :
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||
|
10
|
|
|
#3 |
|
Membre émérite
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 549 ![]() |
edit:grilled
bien joué tomlev belle requête |
|
|
00
|
|
|
#4 | |
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Merci de l aide.
Alors now j ai le message suivant Citation:
Merci pour la mise en page et précision je travaille sur une base MS Access mais bon ça m'a pas posé de soucis jusque là notamment pour faire la requête en 2 temps. Enfin ça veut dire que j'ai fait mes classes à la main par contre. Je fais que de la lecture sur ma base par ailleurs. PS non je peux pas migrer ma base access^^ |
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Ah j'ai une question pour faire le "select new Match" dois je avoir un constructeur qui correspond avec tous les arguments dans ma class Match() car a l heure actuelle je n ai qu un constructeur vide c'est peut etre le soucis?
Merci |
|
|
00
|
|
|
#6 | ||||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
Euh... vu la tête de la requête, finalement il vaut peut-être mieux pas essayer de la traduire
Tu utilises Access ? Et comment tu fais du Linq sur Access au juste ? Les providers fournis avec le framework ne le permettent pas, tu utilises un connecteur tiers ? Sinon, ton type OnCourtData.Match est défini dans le modèle objet de la DB ? Si c'est le cas, tu ne peux pas en créer une instance directement dans la requête, normalement tu le récupères directement à partir d'une table. Tu peux toujours passer par un type anonyme : Code :
Code :
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||||
|
00
|
|
|
#7 | |||
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
J utilise ca en fait pour me connecter à Access, ça pose pas de soucis en lecture. Par contre en update insert il faut bidouiller plus apparemment...
Code c# :
avec myDb qui hérite DataContext. Maintenant j ai l erreur suivante Citation:
|
|||
|
|
00
|
|
|
#8 | ||||||
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Bon je vais mettre le détail de qqs propriétés pour voir si y a pas un soucis
classe Match Code c# :
Code c# :
classe Ratings Code c# :
J'espère que c'est solvable j'ai passé pas mal d'heures à essayer de migrer ça sous Linq2Sql mais la je suis coincé à moins de faire ma requête en 2 temps mais du coup c'est super lent. Et sinon tout le reste de mon appli marche y a juste cette requête un peu plus complexe... |
||||||
|
|
00
|
|
|
#9 | ||||
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Bon en fait j'ai isolé le problème
Quand je fais ca j ai le message d erreur au moment de parcourir le resultat de la requete avec un foreach(des le debut de la boucle) Code c# :
Code c# :
il semble que ce qui bloque dans l anonymous c'est ça Player1 = match.Player1, Player2 = match.Player2, Tournament = match.Tournament, Round = match.Round, c'est à dire mes 4 propriétés qui sont des instances de classe, quand c'est pour une date ou un string ça passe. |
||||
|
|
00
|
|
|
#10 | ||
|
Membre expérimenté
![]() ![]() Inscription : août 2008 Messages : 510 ![]() |
Bonjour,
Pour le premier cas c'est tout a fait normal qu'il y est une erreur pusique dans le code suivant : Code :
Dans le second code, c'est normal que sa fontionne puisque tu parcours le jeu de resultat dans "query", et pour chaque objet de la requete, tu crée un nouvel element que tu insere dans la liste des matches Cordialement
__________________
If you type Google into Google, you Can break the internet" - The IT Crowd |
||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Ok merci mais alors si j insère ces 2 lignes
let r1 = match.Player1.Ratings.Where(r => r.DateRanking == match.Date).SingleOrDefault() let r2 = match.Player2.Ratings.Where(r => r.DateRanking == match.Date).SingleOrDefault() comment je fais pour récupérer leurs valeurs en plus des valeurs des différents attributs de match? |
|
|
00
|
|
|
#12 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
Ce que tu fais n'est pas une utilisation prévue de Linq to SQL...
Linq to SQL est prévu pour SQL Server et SQL Server Compact, et c'est tout ! Ce n'est absolument pas fait pour s'utiliser avec Access ou quoi que ce soit d'autre. Ca peut marcher dans certains cas (tant que les requêtes SQL générées sont compatibles), mais dans certains cas ça va générer des requêtes qui utilisent des fonctions propres à SQL Server, et ça ne fonctionnera plus. L'erreur de syntaxe que tu obtiens en est l'illustration... Tu vas peut-être pouvoir t'en sortir tant que tu fais des requêtes très simples, mais sur le long terme cette solution n'est pas viable. Si tu veux absolument utiliser un ORM avec Access, le seul qui soit compatible (à ma connaissance) est NHibernate.
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
|
|
#13 | |
|
Membre expérimenté
![]() ![]() Inscription : août 2008 Messages : 510 ![]() |
Citation:
Cordialement,
__________________
If you type Google into Google, you Can break the internet" - The IT Crowd |
|
|
|
00
|
|
|
#14 | |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
Citation:
Linq to SQL permet de convertir une requête Linq en SQL (à condition de n'utiliser que des fonctions qui ont un équivalent en SQL), mais le contraire n'est absolument pas vrai....
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
|
00
|
|
|
#15 | |
|
Membre expérimenté
![]() ![]() Inscription : août 2008 Messages : 510 ![]() |
Citation:
Encore merci pour la precision, Cordialement
__________________
If you type Google into Google, you Can break the internet" - The IT Crowd |
|
|
|
00
|
|
|
#16 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
Si j'ai bonne mémoire, on peut aussi le faire avec Linq to SQL (mais je peux me tromper, j'ai très peu utilisé Linq to SQL...)
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
|
|
#17 |
|
Invité de passage
![]() Développeur informatique Inscription : janvier 2012 Messages : 8 ![]() |
Merci pour les différentes réponses
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com