繁体   English   中英

LINQ查询未返回预期结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM