Ho una relazione tabella figlio padre. Nell'esempio seguente Foo ha un FooID e un ParentFooID nullable che punta a un record padre.Join condizionali in LINQ
La tabella Bar è sempre collegata al record padre. Questo è l'SQL che uso per ottenere il risultato.
Select * from Foo f
JOIN Bar b
ON b.FooID =
CASE
WHEN f.ParentFooID is null
THEN f.FooID
ELSE f.ParentFooID
END
Sto riscontrando un po 'di problemi nel trovarlo in una query LINQ. Mi piacerebbe evitare una cross join come la seguente:
var q = from f in Foo
from b in Bar
where b.FooID == (f.ParentFooID ?? f.FooID)
Cheers,
Daniel
Ho profilato il da ... da scenario e sì, risulta in un cross join che esegue una scansione dell'indice (non una ricerca) quindi andrà a svolgere molto peggio della query originale che sta facendo un indice di ricerca. – Spruce
Vale la pena provare, almeno. –