2
有什麼辦法可以將以下SQL語句轉換爲LINQ嗎?如何將多個SQL LEFT JOIN語句與where子句轉換爲LINQ
select ve.EntityID
, fin1.FinanceStat as FinanceStat_New
, fin2.FinanceStat as FinanceStat_Old
from ValuationEvents_PIT_New as ve
left join FinStat_New as Fin1
on ve.EntityID = Fin1.EntityID
left join FinStat_Old as Fin2
on ve.EntityID = Fin2.EntityID
where Fin1.FinanceStat ne Fin2.FinanceStat
and Fin2.FinanceStat is not null
and charindex(Fin1.FinanceStat, 'abc') < 1
and charindex(Fin1.FinanceStat, 'xyz') < 1
這是我的版本,但我需要額外的眼睛來看看它。
var result = (from ve in valuationEventsPit
join fsn in finStatNew on ve.EntityId equals fsn.EntityID into veFsn
from fin1 in veFsn.DefaultIfEmpty()
join fso in finStatOld on ve.EntityId equals fso.EntityID into veFso
from fin2 in veFso.DefaultIfEmpty()
select new
{
ve.EntityId,
FinStatNew1 = fin1 == null ? null : fin1.FinanceStat,
FinStatNew2 = fin2 == null ? null : fin2.FinanceStat
}).
Where(x => x.FinStatNew1 != null &&
x.FinStatNew2 != null &&
x.FinStatNew1 != x.FinStatNew2 &&
!(x.FinStatNew1.Contains("abc")) &&
!(x.FinStatNew1.Contains("xyz"))).ToList();
我排除x.FinStatNew1原因==因爲CHARINDEX(Fin1.FinanceStat, 'ABC')< 1,這將始終返回0,如果x.FinStatNew1不是null 'ABC' 的空或'xyz'不存在,如果x.FinStatNew1爲null,則它將返回null,並且條件仍然爲false(null < 0)。
非常感謝您的幫助。
感謝您的幫助。這不是LINQ to SQL或EF,這是LINQ to Objects,我必須檢查null,否則我會產生NullReferenceException。 –
啊,在這種情況下,我們可以在這裏做更多的事情。我會更新。 –
再次感謝。我看到你現在在使用Inner Join,因爲我這樣做了。我不確定我的翻譯是否正確,否則我不會要求提供建議:)。你是否仍然相信我的查詢正在執行內部連接,即使它正在使用左連接?請閱讀原始SQL而不是我的代碼。 –