Apabila bekerja dengan Rangka Kerja Entiti (EF), anda mungkin perlu melaksanakan pertanyaan SQL mentah dan mendapatkan hasil jenis tanpa nama. Manakala SqlQuery EF
Andaikan anda mempunyai pertanyaan SQL berikut yang mengambil hanya lajur Nama Pertama daripada jadual Pelajar:
select FirstName from student
Menggunakan SqlQuery
var students = Context.Database.SqlQuery<Student>($"select FirstName from student").ToList();
Untuk mendapatkan hasil jenis tanpa nama daripada pertanyaan SQL mentah, anda boleh menggunakan kaedah berikut:
public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params) { using (var cmd = db.Database.Connection.CreateCommand()) { ... using (var dataReader = cmd.ExecuteReader()) { while (dataReader.Read()) { var row = new ExpandoObject() as IDictionary<string, object>; for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++) { row.Add(dataReader.GetName(fieldCount), dataReader[fieldCount]); } yield return row; } } } }
Ini kaedah mencipta ExpandoObject dan mengisinya dengan data yang diambil daripada pembaca data, dengan berkesan mencipta jenis tanpa nama dengan dinamik sifat.
Untuk menggunakan kaedah ini, panggilnya seperti berikut:
List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();
Ini akan mengembalikan senarai objek tanpa nama dengan sifat dinamik yang sepadan dengan lajur dalam set keputusan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Hasil Jenis Tanpa Nama daripada Pertanyaan SQL Mentah dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!