【问题标题】:LINQ avoid OUTER APPLY Oracle 11gLINQ 避免 OUTER APPLY Oracle 11g
【发布时间】:2022-11-13 03:11:56
【问题描述】:

在针对 Oracle 11g 实例运行下面的 LINQ 查询时,它将引发 OUTER APPLY not supported 错误。

var shipmentDetails = (from r in _db.XXF_SHIPMENT_DETAILs where r.SHIP_TO == tradingPartnerId && r.PICKUP_DATE >= pickUpDate select r).GroupBy(x => x.HEADERID).Select(x => x.FirstOrDefault());

“Oracle 数据库 11g 及更低版本不支持 OUTER APPLY。Oracle 正确运行此 LINQ 语句需要 12c 或更高版本。如果你 需要用 Oracle Database 11g 或更低版本运行此语句,重写 它以便可以将其转换为SQL,由版本支持 你使用的神谕。”

【问题讨论】:

    标签: c# oracle linq devart dotconnect


    【解决方案1】:

    解决方案是使用简单的语句来实现您所追求的结果。参考上面的查询,我们...

    首先,获取所有货物。使用.ToList() 强制执行查询

    var shipmentDetails = (from r in _db.XXF_SHIPMENT_DETAILs where r.SHIP_TO == tradingPartnerId && r.PICKUP_DATE >= pickUpDate select r).ToList();
    

    现在 .GroupBy().Select() 进行过滤 - 但这将在内存中完成,而不是在服务器级别,因此避免了不受支持的 OUTER APPLY

    var uniqueShipmentsWithDistinctHeaderIds = shipmentDetails.GroupBy(x => x.HEADERID).Select(x => x.FirstOrDefault());
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 2015-06-24
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 2011-10-07
      相关资源
      最近更新 更多