C # LINQ-TO-SQL OR-оператор в JOIN - PullRequest
0 голосов
/ 05 августа 2009

Как я могу сделать следующий запрос SQL Linq:

SELECT * FROM ORDERS
INNER JOIN ITEMS
ON ORDERS.ID = ITEMS.ORDER_A OR ORDERS.ID = ITEMS.ORDER_B

Я бы подумал, что это будет:

from o in orders
join i in items
on o.ID equals i.OrderA or o.ID equals i.OrderB
select new { Order = o, Item = i }

Я предполагаю, что компилятор хочет что-то еще. Как мне написать это заявление?

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

Вы должны сделать два соединения

from o in orders
join iA in items on o.ID equals iA.OrderA 
join iB in items on o.ID equals iB.OrderB
set i = (iA == null ? iB : iA)
select new { Order = o, Item = i }

На самом деле не пытался скомпилировать это, но в основном это то, что вам нужно сделать, два разных объединения, которые вы выбираете, прежде чем оно будет выделено в массив.

0 голосов
/ 05 августа 2009

То, что вы хотели бы использовать, это http://msdn.microsoft.com/en-us/library/bb549267.aspx, к сожалению, я не думаю, что это очень хорошо отразится на SQL и может использоваться только как метод расширения.

Хотя, возможно, вы можете использовать перекрестное соединение и фильтровать его в условиях где? Я хотел бы сначала проверить сгенерированный SQL, прежде чем использовать этот метод.

from o in orders
from i in items
where o.ID == i.OrderA || o.ID == i.OrderB
select new { Order = o, Item = i }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...