Linq - récupérer plusieurs table pour un datasource [Résolu]

Messages postés
361
Date d'inscription
jeudi 5 février 2004
Dernière intervention
1 octobre 2010
- - Dernière réponse : cs_wally88
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Dernière intervention
1 octobre 2010
- 7 nov. 2008 à 09:27
Bonjour,

J'essaie de récupérer des infos de mes tables "echange" et "contre"  avec comme requete :

var Query =
from p
in oAnnonce.contres
join p2
in oAnnonce.echanges
on p.con_ech_id
equals p2.ech_id
where p.con_ech_id == echid
select p ,p2;

Table<
contre> truc = oAnnonce.GetTable<
contre>();

il me trouve pas les champs echange ce qui je pense est normal.
je peux alors rajouter Table<
echange> truc= oAnnonce.GetTable<
echange>();  mais comment concaténer les deux tables pour que ca me fasse ma source de donnée ?

Je pensais qu'avec le "join" ca se fesais tout seul et je ne toruve aucune doc sur l'utilisation de plusieurs tables.

Merci.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
3
Merci
Salut
Une petite recherche donne
http://tiredblogger.wordpress.com/2007/07/11/table-joins-in-linq-good-bad-and-complexly-ugly/
http://dotnetthoughts.wordpress.com/2007/12/14/the-linq-jukebox-part-2-linq-joins/

Il y a peut etre un probleme de defer loading
http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/06/linq-to-sql-deferred-loading-lazy-load.aspx

Normalement, tu n'as pas à utiliser Table<T> le contexte étant fortement typé tu n'as pas besoin de passer par là.

Quand tu auras trouvé la réponse n'oublie pas de l'indiquer.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Dernière intervention
1 octobre 2010
3
Merci
Bon apprement dans le select je ne peu tout recupérer d'un coup, il faut choisir les champs que l'on veut, en tout cas ca fonctionne bien comme ça.
Et il faut utiliser tout simplement le .ToList() de la requete pour que ca serve de datasource.

public
IList contreLire(
int echid)
{

annonceDBDataContext oAnnonce =
new
annonceDBDataContext();

var Query =
from p
in oAnnonce.contres
join p2
in oAnnonce.echanges
on p.con_ech_id
equals p2.ech_id
where p.con_ech_id == echid
select
new {p.con_id  , p2.ech_type, p2.ech_montant, p2.ech_commentaire} ;

return Query.ToList();
}
Si quelqu'un sais si on peu se passer de mettre les champs un par un, ca m'arrangerais bien :)

Merci pour les liens nhervvagault ca m'a servi.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_wally88
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
3
Merci
Attention,

Le toList() lance la requete sur la base

Il est preferable de le faire à la derniere minute.

public IEnumerable contreLire(
int echid)
{

annonceDBDataContext oAnnonce =
newannonceDBDataContext();

var Query =
from p
in oAnnonce.contres
join p2
in oAnnonce.echanges
on p.con_ech_id
equals p2.ech_id
where p.con_ech_id == echid
selectnew {p. con_id  , p2.ech_type, p2.ech_montant, p2.ech_commentaire} ;

return Query;
}

De cette manière tu peux gagner en performance
surtout faire des cumulations de requetes

exemple :

var q1 = from ....

var q2 = from q1
               where c.city = 'paris'

gridview1.datasource = q2.ToList();

Dans ce cas il y a qu'une requete exécuétée sur la base de données
alors  qu'avec le tolist() du auras pas l'optimisation.

Bon coding

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Dernière intervention
1 octobre 2010
0
Merci
Ah d'accord.

Merci pour ton aide et pour l'astuce.
Commenter la réponse de cs_wally88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.