映射 SQL 查询结果到 DTO 没有被相应地排序

Mapping SQL query result to DTO is not being ordered accordingly

您好,我正在尝试按顺序从 SQL 查询结果中填充一个对象。但是,我的问题是 DTO 当它来自查询结果 mapped/populated 时,并没有按照我在 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. 亚当
  2. 阿里亚
  3. 亚洲
  4. 克鲁兹

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

我希望我说得有道理。

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

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

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

我的错误是参数的定义方式不同 SortBy 是获取 OrderBy 和 vv 的值。这是造成问题的原因!映射实际上按原样工作