当对Oracle 11g实例运行下面的LINQ查询时,它将抛出一个外部应用不受支持的错误。
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。“。
发布于 2022-11-12 19:02:47
解决方案是使用简单的语句来实现您想要的结果。参考上面的查询,我们.
首先,把所有的货物都取走。使用.ToList()强制执行查询
var shipmentDetails = (from r in _db.XXF_SHIPMENT_DETAILs where r.SHIP_TO == tradingPartnerId && r.PICKUP_DATE >= pickUpDate select r).ToList();现在,.GroupBy()和.Select()进行筛选--但是这将在内存中完成,而不是在服务器级别完成,因此避免了不支持的外部应用。
var uniqueShipmentsWithDistinctHeaderIds = shipmentDetails.GroupBy(x => x.HEADERID).Select(x => x.FirstOrDefault());发布于 2022-11-12 19:59:07
您可以使用以下查询,该查询将从该组获得最新记录:
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和窗口函数,但应该提供比客户端处理数据更好的性能。
https://stackoverflow.com/questions/74415752
复制相似问题