首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免外部应用Oracle 11g

避免外部应用Oracle 11g
EN

Stack Overflow用户
提问于 2022-11-12 19:02:47
回答 2查看 35关注 0票数 0

当对Oracle 11g实例运行下面的LINQ查询时,它将抛出一个外部应用不受支持的错误。

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

”OracleDatabase11g及更低版本不支持。要正确运行此LINQ语句,需要Oracle 12c或更高版本。如果需要使用OracleDatabase11g或更低版本运行此语句,请重写它,以便将其转换为您使用的Oracle版本所支持的SQL。“。

EN

回答 2

Stack Overflow用户

发布于 2022-11-12 19:02:47

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

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

代码语言:javascript
复制
var shipmentDetails = (from r in _db.XXF_SHIPMENT_DETAILs where r.SHIP_TO == tradingPartnerId && r.PICKUP_DATE >= pickUpDate select r).ToList();

现在,.GroupBy().Select()进行筛选--但是这将在内存中完成,而不是在服务器级别完成,因此避免了不支持的外部应用。

代码语言:javascript
复制
var uniqueShipmentsWithDistinctHeaderIds = shipmentDetails.GroupBy(x => x.HEADERID).Select(x => x.FirstOrDefault());
票数 0
EN

Stack Overflow用户

发布于 2022-11-12 19:59:07

您可以使用以下查询,该查询将从该组获得最新记录:

代码语言:javascript
复制
var filtered = db.XXF_SHIPMENT_DETAILs 
    .Where(r => r.SHIP_TO == tradingPartnerId && r.PICKUP_DATE >= pickUpDate);

var grouped = fltered
    .GroupBy(r => r.HEADERID)
    .Select(g => new
    {
        HEADERID = g.Key,
        LastId = g.Max(x => x.Id)
    });

var shipmentDetails = 
    from s in filtered
    join g in grouped on s.LastId equals g.Id
    select s;

仍然不是最好的原始SQL和窗口函数,但应该提供比客户端处理数据更好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74415752

复制
相关文章

相似问题

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