ホームページ >データベース >mysql チュートリアル >Entity Framework SQL クエリから匿名型の結果を取得する方法
Entity Framework SQL クエリからの匿名型の結果
Entity Framework では生の SQL クエリを実行できますが、取得しようとすると一般的な課題が発生します匿名の結果。ネイティブ SqlQuery
これを克服するには、基礎となる接続オブジェクトを使用するカスタム アプローチが必要です。次の C# コードは、解決策を提供します。
public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params) { using (var cmd = db.Database.Connection.CreateCommand()) { cmd.CommandText = Sql; if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); } foreach (KeyValuePair<string, object> p in Params) { DbParameter dbParameter = cmd.CreateParameter(); dbParameter.ParameterName = p.Key; dbParameter.Value = p.Value; cmd.Parameters.Add(dbParameter); } 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; } } } }
このメソッドは、SQL クエリ文字列とパラメータのディクショナリを受け取ります。基礎となる接続を使用してコマンドを作成および実行し、結果を読み取り、列名と値を 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 サイトの他の関連記事を参照してください。