こんにちは私は順序付けられた方法でSQLクエリ結果からオブジェクトを設定しようとしています。しかし、私の問題は、DTO がクエリ結果からマッピングされ/配置されたときに、私がSQLクエリでそれを注文した方法ではないということです。
最も簡単な例として、私のデータベースに5人の生徒の記録があるとしましょう。
Select Id , Name, Age from Student Order by Name ASC
GetStudents
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またはDESCによるStoredProcedureの順序の変更に関係なく、同じ順序(この場合、名前ASCで順序付けられた)
StudentsRecord.Students
は、
ストアドプロシージャをDESC StudentsRecord.Students
として変更すると、 StudentsRecord.Students
注文は変わりません 。
私はここで理にかなっていると思う。
本当に、なぜこれが起こっているのか不思議です。このフレームワークは関連していますか?クエリの結果セットは基本的にASCまたはDESCの順番が異なる同じリストであり、管理スタジオからクエリを実行すると明らかにそれに応じて動作します。しかし、それがオブジェクトにマップされるとき、リストは結果からの順序を反映しません。
さて、私はついにこの質問に答えました(人間的なエラーでした^^) 。私たちはDapperを使用して、コマンドクエリパターン(CQRS)を使用するようにプロジェクトをセットアップします。
私のシナリオでは、サーバー側のページングを使用したデータテーブルの従来の実装から拡張しています。そこで、ストアドプロシージャを拡張して、 SortByとOrderByの 2つの追加パラメータを受け入れるようにしました。これは、データテーブルの各列をASC / DESC
私の間違いは、 SortBy
がOrderBy
とvvの値を取得していたのとは別の方法でパラメータが定義されていることSortBy
た。それは問題を引き起こしていた!マッピングは実際にはそのまま動作します