LINQ to实体排序不正确
本文关键字:不正确 排序 实体 to LINQ | 更新日期: 2023-09-27 18:25:21
我有一个函数运行一个有点复杂的LINQ查询,但我已经验证了下面的简化代码也存在问题。我特别告诉查询按RequiredDate
排序,这是一个DateTime
。然而,这一点被完全忽略了——排序实际上是由另一个属性PONumber
进行的。数据库都是随机测试数据,所以除了Id
列之外,什么都不排序。我不知道为什么使用其他属性而不是我试图排序的列。我使用Kendo UI,所以IEnumerable
在控制器中转换为Kendo类型,但LINQ to Entities查询返回的顺序不正确。是什么导致了这个问题?
(以下为简化版本)
类别:
public partial class PurchaseOrder : BaseEntity
{
public virtual int PONumber { get; set; }
public virtual DateTime RequiredDate { get; set; }
}
映射:
public PurchaseOrderMap()
{
ToTable("PurchaseOrder");
HasKey(c => c.Id);
Property(u => u.PONumber).IsRequired();
Property(u => u.RequiredDate).IsRequired();
}
服务(获取数据):
public virtual IEnumerable<PurchaseOrder> GetAllPOs()
{
var query = _poRepository.Table;
query = query.Where(p => p.Shipment == null);
query = query.OrderBy(p => p.RequiredDate);
return query;
}
此代码在控制器中调用函数。CCD_ 6和CCD_。
public ActionResult POList([DataSourceRequest]DataSourceRequest request)
{
var pos = _poService.GetAllPOs();
DataSourceResult result = pos.ToDataSourceResult(request, o => PreparePOModelForList(o));
return Json(result);
}
针对DB的实际查询(由SQL Profiler提供)是:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[PONumber] AS [PONumber],
[Extent1].[RequiredDate] AS [RequiredDate],
[Extent1].[LastUpdateDate] AS [LastUpdateDate],
FROM [dbo].[PurchaseOrder] AS [Extent1]
ORDER BY [Extent1].[PONumber] ASC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
基于OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY我猜你在某个地方有一些额外的逻辑,它试图通过Skip()和Take()方法应用分页。我的猜测是,你在那里做了一些你遗漏的额外排序。我无法根据你给出的代码来证明这一点,但试着弄清楚是什么生成了你的OFFSET。。。获取下一个。。。我怀疑你会找到答案的。