Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未相应地排序将SQL查询结果映射到DTO的操作_C#_Sql_.net_Dapper - Fatal编程技术网

C# 未相应地排序将SQL查询结果映射到DTO的操作

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

您好,我正在尝试以有序的方式从SQL查询结果填充一个对象。但是,我的问题是,当从查询结果映射/填充DTO时,它的排序方式与我在SQL查询中对其排序的方式不同

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

按姓名从学生订单中选择Id、姓名、年龄ASC
是数据库中的my
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()
        }
我遇到的问题是
学生记录。学生
学生对象列表以相同的顺序返回(在本例中,按名称ASC排序),而不考虑按ASC或DESC更改存储过程顺序

Students记录。Students
显示

  • 亚当
  • 阿里亚
  • 亚洲
  • 克鲁兹
  • 如果我将存储过程更改为DESC
    StudentsRecord。Students
    顺序保持不变

    我希望我在这里讲得有道理


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

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

    在我的场景中,我是从带有服务器端分页的datatable的遗留实现扩展而来的。因此,我扩展了存储过程,以接受两个额外的参数SortByOrderBy,因为datatable上的每一列都可以通过ASC/DESC进行排序


    我的错误是,参数是以另一种方式定义的,
    SortBy
    获取
    OrderBy
    和vv的值。这就是问题的根源!映射实际上是按原样工作的

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

    在我的场景中,我是从带有服务器端分页的datatable的遗留实现扩展而来的。因此,我扩展了存储过程,以接受两个额外的参数SortByOrderBy,因为datatable上的每一列都可以通过ASC/DESC进行排序


    我的错误是,参数是以另一种方式定义的,
    SortBy
    获取
    OrderBy
    和vv的值。这就是问题的根源!映射实际上是按原样工作的

    在投影之前是否确认查询结果的顺序正确?您可以在从数据库获取列表后对其进行排序Hi Jonathan,谢谢!。是从管理层运行查询时,查询将返回预期结果studio@jaimeMacias谢谢你。。但我的意思是,这有点违背了在存储过程中对其进行排序的目的,不是吗?我说的是调试模式。如果queryResult包含已排序的结果,但学生没有,那么我们知道问题在于Select调用。否则,可能是在读取数据时。您是否确认在投影之前查询结果的顺序正确?您可以在从数据库获取列表后对其进行排序Hi Jonathan,谢谢!。是从管理层运行查询时,查询将返回预期结果studio@jaimeMacias谢谢你。。但我的意思是,这有点违背了在存储过程中对其进行排序的目的,不是吗?我说的是调试模式。如果queryResult包含已排序的结果,但学生没有,那么我们知道问题在于Select调用。否则,可能是在读取数据时。