【发布时间】: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 显示列表
- 亚当
- 阿里亚
- 亚洲
- 本
- 克鲁兹
如果我将存储过程更改为 DESC StudentsRecord.Students 排序保持不变。
我希望我在这里说得通。
真的,我只是想知道为什么会这样。这个框架有关系吗?查询的结果集本质上是相同的列表,只是顺序不同ASC 或 DESC,当您从管理工作室运行查询时,它显然会相应地工作。但是当它被映射到对象时,列表不会反映结果的排序..
【问题讨论】:
-
您是否在投影前确认查询结果已正确排序?
-
从数据库stackoverflow.com/questions/3309188/…得到列表后可以排序
-
嗨乔纳森,谢谢!是的,当您从管理工作室运行查询时,查询会返回预期结果
-
@jaimeMacias 谢谢你……但我的意思是这有点违背了在存储过程中对其进行排序的目的,不是吗?
-
我说的是调试模式。如果 queryResult 包含有序的结果,但 Student 没有,那么我们知道问题出在 Select 调用上。否则,可能是在读取数据时。