2011-03-31 7 views
2

je le code suivant:requête LINQ retour plusieurs tables

MyDataContext dc = new MyDataContext(); 

IQueryable<Table1> q1 = 
     from n in dc.Table1 
     select n 

Ce que je veux être en mesure de faire est de se joindre à une deuxième table, donc:

var qry = 
     from n in dc.Table1 
     join r in dc.Table2 on n.Key equals r.Key 
     select new { n, r }; 

Cela me renvoie un type de IQueryable<anonymous>. Ce que je veux maintenant faire est d'extraire Table1 et Table2. Par exemple (cela ne fonctionne évidemment pas):

IQueryable<Table1> q1 = qry.Table1 
IQueryable<Table2> q2 = qry.Table2 

Y at-il un moyen de le faire?

Répondre

4

Vous voulez faire quelque chose comme ça?

IQueryable<Table1> q1 = qry.Select(x => x.n); 
IQueryable<Table2> q2 = qry.Select(x => x.r); 
2

Bien sûr, il y a:

IQueryable<Table1> q1 = qry.Select(a => a.n); 
IQueryable<Table2> q2 = qry.Select(a => a.r); 
1

Vous pouvez définir des clés étrangères à vos tables (sur les champs respectifs key) et ajouter des associations pour eux à vos clases modèle (idéalement via LINQ to SQL designer).

Ensuite, vous pouvez faire:

IQueryable<Table1> items1 = dc.Table1; 

foreach (var item1 in items1) 
{ 
    var items2 = item1.Table2s; // naming might differ 
} 

L'inconvénient de le faire de cette façon, est que, même avec DataLoadOption s, L2S fera ce très cher. Interrogation de Table2 pour chaque ligne de l'ensemble de résultats Table1.