C# 未相应地排序将SQL查询结果映射到DTO的操作
您好,我正在尝试以有序的方式从SQL查询结果填充一个对象。但是,我的问题是,当从查询结果映射/填充DTO时,它的排序方式与我在SQL查询中对其排序的方式不同 举个最简单的例子,假设我的数据库中有5条学生记录C# 未相应地排序将SQL查询结果映射到DTO的操作,c#,sql,.net,dapper,C#,Sql,.net,Dapper,您好,我正在尝试以有序的方式从SQL查询结果填充一个对象。但是,我的问题是,当从查询结果映射/填充DTO时,它的排序方式与我在SQL查询中对其排序的方式不同 举个最简单的例子,假设我的数据库中有5条学生记录 按姓名从学生订单中选择Id、姓名、年龄ASC是数据库中的myGetStudents存储过程 那么让我们假设这是实际执行映射的代码 var queryResult= conn.GetStudents(); //this is just the conn that calls the s
按姓名从学生订单中选择Id、姓名、年龄ASC
是数据库中的myGetStudents
存储过程
那么让我们假设这是实际执行映射的代码
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()
}
我遇到的问题是学生记录。学生
学生对象列表以相同的顺序返回(在本例中,按名称ASC排序),而不考虑按ASC或DESC更改存储过程顺序
Students记录。Students
显示
StudentsRecord。Students
顺序保持不变
我希望我在这里讲得有道理
真的,我只是想知道为什么会这样。这个框架相关吗?查询的结果集本质上是相同的列表,只是顺序不同ASC或DESC,显然,当您从management studio运行查询时,它会相应地工作。但是当它被映射到对象时,列表并不反映结果的顺序。好的,所以我终于有了这个问题的答案(这是人为错误)。我们使用Dapper并将项目设置为使用命令查询模式(CQRS) 在我的场景中,我是从带有服务器端分页的datatable的遗留实现扩展而来的。因此,我扩展了存储过程,以接受两个额外的参数SortBy和OrderBy,因为datatable上的每一列都可以通过ASC/DESC进行排序
我的错误是,参数是以另一种方式定义的,
SortBy
获取OrderBy
和vv的值。这就是问题的根源!映射实际上是按原样工作的好的,所以我终于找到了这个问题的答案(这是人为错误^^,)。我们使用Dapper并将项目设置为使用命令查询模式(CQRS)
在我的场景中,我是从带有服务器端分页的datatable的遗留实现扩展而来的。因此,我扩展了存储过程,以接受两个额外的参数SortBy和OrderBy,因为datatable上的每一列都可以通过ASC/DESC进行排序
我的错误是,参数是以另一种方式定义的,
SortBy
获取OrderBy
和vv的值。这就是问题的根源!映射实际上是按原样工作的在投影之前是否确认查询结果的顺序正确?您可以在从数据库获取列表后对其进行排序Hi Jonathan,谢谢!。是从管理层运行查询时,查询将返回预期结果studio@jaimeMacias谢谢你。。但我的意思是,这有点违背了在存储过程中对其进行排序的目的,不是吗?我说的是调试模式。如果queryResult包含已排序的结果,但学生没有,那么我们知道问题在于Select调用。否则,可能是在读取数据时。您是否确认在投影之前查询结果的顺序正确?您可以在从数据库获取列表后对其进行排序Hi Jonathan,谢谢!。是从管理层运行查询时,查询将返回预期结果studio@jaimeMacias谢谢你。。但我的意思是,这有点违背了在存储过程中对其进行排序的目的,不是吗?我说的是调试模式。如果queryResult包含已排序的结果,但学生没有,那么我们知道问题在于Select调用。否则,可能是在读取数据时。