没有相应地对SQL查询结果映射到DTO

时间:2016-11-09 22:41:28

标签: c# sql .net dapper

您好我正在尝试以有序的方式从SQL查询结果填充对象。但是,我的问题是DTO,在从查询结果中映射/填充时,不按照我在SQL查询中对它进行排序的方式进行排序。

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

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

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

StudentsRecord.Students显示

列表
  1. 亚当
  2. 阿里亚
  3. 克鲁兹
  4. 如果我更改了我的存储过程,因为 DESC {{1}}顺序保持不变。

    我希望我在这里有意义。

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

1 个答案:

答案 0 :(得分:0)

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

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

我的错误是参数是以SortBy获得OrderBy和vv值的另一种方式定义的。这导致了问题!映射实际上可以正常工作