Ваш конкретный пример использует CASE
для возврата к ненулевому значению, которое на самом деле просто COALESCE
. В этом случае это работает:
var q = from f in dc.Foos
join
b in dc.Bars
on
(f.ParentFooID ?? f.FooID)
equals
b.FooID
into grouped
select grouped;
Что означает:
SELECT ...
FROM [dbo].[Foo] AS [t0]
LEFT OUTER JOIN [dbo].[Bar] AS [t1]
ON (COALESCE([t0].[ParentFooID],[t0].[FooID])) = [t1].[FooID]
ORDER BY [t0].[FooID], [t1].[BarID]
Ключ - это левое внешнее соединение на COALESCE(case1, case2)
, поэтому преобразователь выражений, похоже, это понимает.