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

cs_wally88 361 Messages postés jeudi 5 février 2004Date d'inscription 1 octobre 2010 Dernière intervention - 5 nov. 2008 à 10:29 - Dernière réponse : cs_wally88 361 Messages postés jeudi 5 février 2004Date d'inscription 1 octobre 2010 Dernière intervention
- 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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 5 nov. 2008 à 21:45
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.

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
cs_wally88 361 Messages postés jeudi 5 février 2004Date d'inscription 1 octobre 2010 Dernière intervention - 6 nov. 2008 à 10:33
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.

Merci cs_wally88 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_wally88
Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 6 nov. 2008 à 19:21
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

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de nhervagault
cs_wally88 361 Messages postés jeudi 5 février 2004Date d'inscription 1 octobre 2010 Dernière intervention - 7 nov. 2008 à 09:27
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.