加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ to SQL join生成连接IS NULL的SQL

发布时间:2020-12-15 17:15:07 所属栏目:百科 来源:网络整理
导读:我不擅长 Linq表达,今天我遇到了一个奇怪的问题,如下面的内连接语句, var orders = (from q in dao.CurrentDBContext.New_OrderForm join d in dao.CurrentDBContext.New_OrderGoodsDetail on q.billNum equals d.billNum select new { q.billNum,q.orderSou
我不擅长 Linq表达,今天我遇到了一个奇怪的问题,如下面的内连接语句,
var orders = (from q in dao.CurrentDBContext.New_OrderForm 
              join d in dao.CurrentDBContext.New_OrderGoodsDetail on q.billNum equals d.billNum
              select new
             {    
                q.billNum,q.orderSource,q.sourceOddNum    
                d.PPT    
             }

当我追踪linq语句时,我很困惑,实体框架会将linq语句转换为下面的sql语句

SELECT 
[Extent1].[billNum] AS [billNum],[Extent1].[orderSource] AS [orderSource],[Extent1].[sourceOddNum] AS [sourceOddNum],[Extent2].[PPT] AS [PPT]
FROM [dbo].[New_OrderForm] AS [Extent1]
INNER JOIN [dbo].[New_OrderGoodsDetail] AS [Extent2] 
           ON ([Extent1].[billNum] = [Extent2].[billNum]) OR 
              (([Extent1].[billNum] IS NULL) AND ([Extent2].[billNum] IS NULL))

你知道为什么下面的SQL段会自动附加吗?

或(([Extent1].[billNum] IS NULL)AND([Extent2].[billNum] IS NULL)“

我不希望上面的内容自动附加,因为它确实降低了SQL性能.有什么建议?

解决方法

如果您无法将billNum列更改为不可为空,则可以执行以下操作.

首先,设置@Giorgi提到的选项

class CurrentDBContext
{
    public CurrentDBContext()
    {
        Configuration.UseDatabaseNullSemantics = true;
        // ...
    }
}

然后将LINQ查询更改为不使用join,但这样简单

var orders = (from q in dao.CurrentDBContext.New_OrderForm 
              from d in dao.CurrentDBContext.New_OrderGoodsDetail
              where q.billNum == d.billNum
              select ...

结果将是您所显示的(使用JOIN!)而没有OR部分的确切SQL查询.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读