ホームページ >データベース >mysql チュートリアル >Entity Frameworkを使用してSQLクエリから匿名型の結果を抽出する方法

Entity Frameworkを使用してSQLクエリから匿名型の結果を抽出する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 17:26:14281ブラウズ

How to Extract Anonymous Type Results from SQL Queries Using Entity Framework?

Entity Framework での SQL クエリからの匿名型結果の抽出

Entity Framework では、SqlQueryこのメソッドは、生の SQL クエリを実行し、結果を指定された型 T のオブジェクトとして返すために使用されます。ただし、このメソッドを使用してテーブルから特定の列のみを取得しようとすると、開発者は、データ リーダーが予期したものと互換性がないため、例外が発生する可能性があります。 object type.

この制限を克服して匿名型の結果を取得するには、生の SQL を直接活用することが解決策となります。提供されているメソッド DynamicListFromSql を使用すると、開発者はこの機能を実現できます。

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();

このアプローチを利用すると、開発者は SQL クエリから匿名型の結果を簡単に取得でき、クエリ結果に基づいて特定の列の取得やカスタム データ構造の作成が容易になります。

以上がEntity Frameworkを使用してSQLクエリから匿名型の結果を抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。