Entity Framework (EF) を使用する場合、生の SQL クエリを実行して匿名型の結果を取得することが必要になる場合があります。一方、EF の SqlQuery
Student テーブルから FirstName 列のみを取得する次の SQL クエリがあるとします。
select FirstName from student
SqlQuery
var students = Context.Database.SqlQuery<Student>($"select FirstName from student").ToList();
生の SQL クエリから匿名型の結果を取得するには、次のメソッドを使用できます。
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; } } } }
このメソッドは、 ExpandoObject を展開し、データ リーダーからフェッチしたデータを取り込み、動的で匿名型を効果的に作成します。
このメソッドを使用するには、次のように呼び出します。
List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();
これは、内の列に対応する動的プロパティを持つ匿名オブジェクトのリストを返します。結果セット。
以上がEntity Framework で生の SQL クエリから匿名型の結果を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。