2013-07-31 3 views
0

У меня есть основная таблица, которая имеет общую информацию из двух таблиц. Также у меня есть две таблицы, которые имеют конкретную информацию каждого типа. Наконец, у меня есть последняя таблица, которая имеет отношение к любой из этих двух вторичных таблиц. Возможно, что эта последняя таблица имеет отношение к одной или обеим вторичным таблицам.Как сделать союз или «или» в этом случае?

Модель:

  • MainTable (IDMainTable, имя ...)
  • Secondary01 (IDSecondary01, IDMaintable, имя ....)
  • Secondary02 (IDSecondary02, IDMainTable Имя ... .)
  • данных (IDData, имя ...)
  • DataRelationship (IDData, IDSecondary01, IDSecondary02)

Я хотел бы получить все регистры в основной таблице, которые любая из вторичных таблиц имеет отношение к данным. У меня IDData как условие.

В SQL это было бы что-то подобное:

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 

Как я могу сделать этот запрос с расширенными методами или LINQ юридических лиц?

Спасибо.

ответ

1

Вы можете использовать метод Enumerable.Union.

Производит объединение соединений двух последовательностей с использованием равенства по умолчанию .

Как:

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

и таким образом сделать один или два запроса к базе данных? Я хотел бы получить доступ к базе данных один раз. –

+0

@ ÁlvaroGarcía, не перебирайте запрос, просто формируйте свой запрос с помощью 'Union', и, итерации, он должен перейти в базу данных один раз. – Habib

+0

@ ÁlvaroGarcía, просто добавил фрагмент кода, чтобы изобразить то, что я имел в виду. – Habib

Смежные вопросы