您好我正在尝试以有序的方式从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
显示
如果我更改了我的存储过程,因为 DESC {{1}}顺序保持不变。
我希望我在这里有意义。
真的,我只是想知道为什么会这样。这个框架是相关的吗?查询的结果集本质上是相同的列表,只有不同的排序 ASC或DESC ,显然,当您从管理工作室运行查询时,它会相应地工作。但是当它被映射到对象时,列表不会反映结果的排序..
答案 0 :(得分:0)
好的,所以我终于得到了这个问题的答案 (这是人为错误^^,) 。我们使用Dapper并设置我们的项目以使用命令查询模式(CQRS)。
在我的场景中,我将从具有服务器端分页的遗留数据表实现扩展。所以我扩展了存储过程以接受另外两个参数 SortBy 和 OrderBy ,因为数据表上的每一列都可以通过ASC / DESC进行排序
我的错误是参数是以SortBy
获得OrderBy
和vv值的另一种方式定义的。这导致了问题!映射实际上可以正常工作