[英]LINQ query not returning expected results
我正在嘗試在LINQ c#中加入以下SQL的三個SQL表
SELECT
rpp.*
FROM dbo.Orgs ao
LEFT JOIN dbo.Afflia rpa
ON rpa.AccountId = ao.ID
INNER JOIN dbo.reports rpp
ON rpp.Id = rpa.reporttId
WHERE ao.Name like '%xyz%'
上面的查詢返回數據,但是等效的LINQ查詢沒有如下所示
from a in context.Orgs
join aff in context.Afflia on a.ID equals aff.AccountId
join prescriber in context.Reports on aff.reportId equals prescriber.Id
where a.ORG_NAME.Contains("xyz")
我可以知道錯誤在哪里嗎?
在您的SQL中,您正在向dbo.Afflia進行LEFT聯接,但是在您的LINQ中,您正在進行內部聯接。 您需要添加“ DefaultIfEmpty(),例如
from aff in context.Afflia.Where(join condition here).DefaultIfEmpty()
您可以這樣做:
var prescribers = (from a in context.Orgs
from aff in context.Afflia.Where(aff => aff.AccountId == a.ID)
from prescriber in context.Reports.Where(pres => pres.Id == aff.reportId)
where a.ORG_NAME.Contains("xyz")
select prescriber)
.ToList();
在LINQ中,您進行了INNER連接,但是在SQL中,您進行了LEFT連接。
嘗試以下方法:
from a in context.Orgs
join aff in context.Afflia on a.ID equals aff.AccountId into affs
from aff in affs.DefaultIfEmpty()
join prescriber in context.Reports on aff.reportId equals prescriber.Id
where a.ORG_NAME.Contains("xyz")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.