【问题标题】:Mapping SQL query result to DTO is not being ordered accordingly未对将 SQL 查询结果映射到 DTO 进行相应排序
【发布时间】:2016-11-09 22:41:27
【问题描述】:

您好,我正在尝试以有序的方式从 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 排序),无论 更改 StoredProcedure 顺序ASC 或 DESC

StudentsRecord.Students 显示列表

  1. 亚当
  2. 阿里亚
  3. 亚洲
  4. 克鲁兹

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

我希望我在这里说得通。

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

【问题讨论】:

  • 您是否在投影前确认查询结果已正确排序?
  • 从数据库stackoverflow.com/questions/3309188/…得到列表后可以排序
  • 嗨乔纳森,谢谢!是的,当您从管理工作室运行查询时,查询会返回预期结果
  • @jaimeMacias 谢谢你……但我的意思是这有点违背了在存储过程中对其进行排序的目的,不是吗?
  • 我说的是调试模式。如果 queryResult 包含有序的结果,但 Student 没有,那么我们知道问题出在 Select 调用上。否则,可能是在读取数据时。

标签: c# sql .net dapper


【解决方案1】:

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

在我的场景中,我从带有服务器端分页的数据表的旧实现进行扩展。所以我扩展了存储过程以接受两个附加参数 SortByOrderBy 因为数据表上的每一列都可以通过 ASC/DESC 进行排序

我的错误是参数定义的另一种方式SortBy得到OrderBy和vv的值。这是造成问题的原因!映射实际上是按原样工作的

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2020-06-11
    • 2019-07-15
    • 2018-12-08
    • 2019-07-25
    • 2022-01-11
    相关资源
    最近更新 更多