当前位置: 首页 > 面试题库 >

UseDatabaseNullSemantics仍会生成NULL检查

广献
2023-03-14
问题内容

我的上下文对象(构造函数)上有这个:

this.Configuration.UseDatabaseNullSemantics = true;

但是即使有这个设置,这个查询:

var query = (from i in _repo.Invoices
             join o in _repo.Orders on i.orderid equals o.orderid
             join o2 in _repo.Orders on o.linkedorderid equals o2.linkedorderid  into leftOrders
             from lo in leftOrders.DefaultIfEmpty()
             where invoiceIds.Contains(i.invoiceid)
             select new
             {
                i, lo
             }).ToList();

返回此SQL:

SELECT 
    [Extent1].[invoiceid] AS [invoiceid], 
    [Extent1].[custid] AS [custid], 
    [Extent1].[orderid] AS [orderid], 
    [Extent1].[orderamount] AS [orderamount], 
    [Extent1].[invoiceamount] AS [invoiceamount], 
    [Extent1].[paidamount] AS [paidamount], 
    [Extent1].[paidstatus] AS [paidstatus], 
    [Extent1].[printdate] AS [printdate], 
    [Extent1].[updateddate] AS [updateddate]
    FROM   [dbo].[invoices] AS [Extent1]
    INNER JOIN [dbo].[orders] AS [Extent2] ON [Extent1].[orderid] = [Extent2].[orderid]
    LEFT JOIN [dbo].[orders] AS [Extent3] ON ([Extent2].[linkedorderid] = [Extent3].[linkedorderid]) OR (([Extent2].[linkedorderid] IS NULL) AND ([Extent3].[linkedorderid] IS NULL))
    WHERE [Extent1].[invoiceid] IN (3098489, 3123185, 3156838)

不难看出我收到了System.OutOfException错误,因为我有成千上万的具有linkedorderid等于NULL的订单。

如果我删除OR (([Extent2].[linkedorderid] IS NULL) AND ([Extent3].[linkedorderid] IS NULL))查询,可以正常运行并返回所有有或没有子工作订单的发票…

知道我该如何解决吗?


问题答案:

这行得通吗?如果删除(或(null并且为null))子句时发布的查询正确,那么我认为这将执行相同的查询。(这假定联接中没有逻辑错误,如其他文章中所建议。)

var query = (from i in _repo.Invoices
    from o in _repo.Orders.Where(c => c.orderid == i.orderid)
    from o2 in _repo.Orders.Where(c => c.linkedorderid == o.linkedorderid).DefaultIfEmpty()                          
    where invoiceIds.Contains(i.invoiceid)
    select new
    {
       i, o2
    }).ToList();


 类似资料:
  • 这是Kotlin的bug,还是和Android Studio有关?

  • 问题内容: 在此代码中。 我们向函数传递值。可以正常编译,但是在运行时提供了一个我没想到的。为什么它引发异常,而不是评估条件并显示“字符串为空”? 假设传递给实际参数的值是从某个进程生成的。假定该进程错误地返回了一个值并将其馈送到testFun。如果是这种情况,如何验证传递给函数的值是否为null? 一种(奇怪的)解决方案可能是将形式参数分配给函数内部的某个变量,然后对其进行测试。但是,如果有许多

  • 问题内容: 这是下面的代码: 如果值是我仍然得到未选中的框。我是不是应该从上面做错事,应该工作? 有任何想法吗? 问题答案: 使用is_null或运算符。

  • 问题内容: 我试图读取JSON文件并将其转换为数组,但是在读取JSON文件后从数组获取空值。我正在为我的班级使用默认构造函数。 JSON文件: 本类: 问题答案: 您的Gson映射与给定的JSON不匹配。默认情况下,Gson通过 确切 名称将JSON属性映射到目标映射中的相应字段。看一眼: 和 属性名称大小写和字段名称大小写不匹配。您需要的是正确映射JSON。要么: 或通过覆盖名称匹配(这更适合J

  • 我已经使用Spring Security和SAML实现了SSO。以下是目前为我工作的内容: 当我尝试访问SP上的任何资源时,如果我还没有登录,我会被重定向到我的IdP(在我的情况下是idp.ssocircle.com)。在IDP成功验证后,我会被重定向回SP,并授权传入的SAML响应并为相应的用户创建一个会话。到目前为止,一切都很酷!但是当我从IDP注销时(通过从idp.ssocircle.com

  • 编辑>>演讲家:这不是重复的问题.. 嗨,伙计们,我是maven的新手,我正在尝试制作一个与oracle数据库交互的应用程序,但是出现了“Missing artifact com.oracle.jdbc:ojdbc6:jar:11.2.0.3”错误。我试过了 步骤1: 除此之外,我还在Windows>Preference>Maven>Installation和UserSettings中做了修改。