Мне нужно преобразовать SQL-запрос в запрос Linq to SQL, и я не смогу получить ожидаемый результат:
У меня есть 2 таблицы, база, M таблиц
BaseOne
{
MID (FK) , points to M
MChildID(FK, Nullable), points to M
}
M {
ID(PK)
}
Упрощенный выбор:
SELECT * from BaseOne as f
LEFT JOIN M as m ON ISNULL(f.MChildID, f.MID) = m.ID
Я пробовал это:
from f in BaseOne
from m in M.Where(function(x) If(f.MChildID.HasValue,x.ID.Equals(f.MChildID.Value),x.ID.Equals(f.MID.Value))).DefaultIfEmpty
Он сгенерировал этот SQL:
...
(CASE
WHEN [t0].[MID] IS NOT NULL THEN
(CASE
WHEN [t1].[ID] = ([t0].[MID]) THEN 1
WHEN NOT ([t1].[ID] = ([t0].[MID])) THEN 0
ELSE NULL
END)
ELSE
(CASE
WHEN [t1].[ID] = ([t0].[MChildID]) THEN 1
WHEN NOT ([t1].[ID] = ([t0].[MChildID])) THEN 0
ELSE NULL
END)
END)) = 1
LEFT OUTER JOIN ...
Я следовал этим инструкциям , но этот пример - не совсем то, что я пытаюсь сделать.
Есть предложения?