2013-07-31 6 views
0

J'ai une table principale qui a l'information commune de deux tables. J'ai aussi deux tables qui ont l'information particulière de chaque type. Enfin, j'ai une dernière table qui a une relation avec l'une de ces deux tables secondaires. Il est possible que cette dernière table ait une relation avec une ou les deux tables secondaires.comment faire une union ou "ou" dans ce cas?

Le modèle est:

  • maintable (IDMainTable, nom ...)
  • Secondary01 (IDSecondary01, IDMaintable, nom ....)
  • Secondary02 (IDSecondary02, IDMainTable Nom ... .)
  • données (IDData, nom ...)
  • DataRelationship (IDData, IDSecondary01, IDSecondary02)

Je voudrais obtenir tous les registres dans la table principale que l'une des tables secondaires a une relation avec une donnée. J'ai l'IDData comme condition.

Dans SQL, il serait quelque chose comme ça:

select * from Maintable, Secondary01, DataRelationship 
where MainTable.IDMainTable = Secondary01.IDMainTable 
and Secondary01.IDSecondary01 = DataRelationship.IDSecondary01 
and DataRelationship.IDData = 1234 

UNION 
select * from Maintable, Secondary02, DataRelationship 
where MainTable.IDMainTable = Secondary02.IDMainTable 
and Secondary02.IDSecondary02 = DataRelationship.IDSecondary02 
and DataRelationship.IDData = 1234 

Comment puis-je faire cette requête avec des méthodes étendues ou à des entités LINQ?

Merci.

Répondre

1

Vous pouvez utiliser la méthode Enumerable.Union.

Génère l'union de deux séquences en utilisant l'égalité par défaut .

Comme:

var query = (from t in db.Maintable 
      from r in db.Secondary02 
      //.....your rest of query 
      select ...) 
      .Union 
      (from t in db.Maintable 
      from r in db.Secondary02 
      //.....your rest of query 
      select ...); 
+0

et ainsi faire une ou deux requêtes à la base de données? Je voudrais accéder une fois à la base de données. –

+0

@ ÁlvaroGarcía, ne pas itérer la requête, il suffit de former votre requête en utilisant 'Union' et en itérant, il devrait aller à la base de données une fois. – Habib

+0

@ ÁlvaroGarcía, vient d'ajouter un extrait de code pour décrire ce que je voulais dire. – Habib

Questions connexes