将SQL查询结果映射到DTO的顺序没有相应地排列

本文关键字:排列 顺序 查询 SQL 结果 映射 DTO | 更新日期: 2023-09-27 18:17:15

嗨,我正试图以有序的方式从SQL查询结果填充对象。然而,我的问题是,当DTO从查询结果映射/填充时,它的排序方式与我在SQL查询中排序的方式不同。

对于最简单的例子,假设我的数据库中有5条学生的记录。

Select Id , Name, Age from Student Order by Name ASC是数据库中的GetStudents存储过程

那么让我们假设这是实际进行映射的代码

    var queryResult= conn.GetStudents(); //this is just the conn that calls the stored procedure which is returned as a enumerable list
var myStudentRecord = new StudentsRecord{
        TotalRecord = queryResult.ToList().Count(),
        //this is not ordered according to the result from SP
        Students = queryResult.Select(result => new Student
                                     {
                                         Id = result.Id,
                                         Name = result.Name
                                         Age = result.Age
                                     }).ToList()
        }

我遇到的问题是学生对象的StudentsRecord.Students列表以相同的顺序返回(在这种情况下按名称ASC排序),无论通过ASC或DESC更改StoredProcedure顺序

StudentsRecord.Students显示

的列表
    亚当
  1. Arria
  2. 亚洲
  3. 克鲁兹

如果我将我的存储过程更改为DESC StudentsRecord.Students排序保持不变。

我希望我说得有意义。

真的,我只是想知道为什么会发生这种事。这个框架相关吗?来自查询的结果集本质上是相同的列表,只是排序不同ASC或DESC,显然,当您从管理工作室运行查询时,它会相应地工作。但是当它被映射到对象时,列表并不反映结果的顺序。

将SQL查询结果映射到DTO的顺序没有相应地排列

好了,所以我终于有了这个问题的答案(这是人为错误^^,)。我们使用Dapper并设置我们的项目使用命令查询模式(CQRS)。

在我的场景中,我扩展了带有服务器端分页的数据表的遗留实现。因此,我扩展了存储过程以接受两个额外的参数SortByOrderBy,因为数据表上的每一列都可以通过ASC/DESC

进行排序。

我的错误是参数定义的另一种方式SortBy获得OrderBy和vv的值。这是导致问题的原因!映射是这样的