首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有返回预期结果的LINQ查询

没有返回预期结果的LINQ查询
EN

Stack Overflow用户
提问于 2017-08-28 19:26:54
回答 3查看 255关注 0票数 0

我试图将下面的SQL连接到LINQ c#中的三个SQL表中

代码语言:javascript
复制
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查询没有如下所示

代码语言:javascript
复制
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")

,我能知道错误在哪里吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-28 19:35:06

在您的SQL中,您正在对dbo.Afflia执行左联接,但在LINQ中,您正在执行内部连接。您需要添加"DefaultIfEmpty()“,例如

代码语言:javascript
复制
from aff in context.Afflia.Where(join condition here).DefaultIfEmpty()
票数 1
EN

Stack Overflow用户

发布于 2017-08-28 20:25:09

在LINQ中,您做了内部连接,但是在SQL中,您确实离开了join。

试一试:

代码语言:javascript
复制
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")
票数 2
EN

Stack Overflow用户

发布于 2017-08-28 19:40:47

你可以这样做:

代码语言:javascript
复制
        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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45926084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档