ホームページ > データベース > mysql チュートリアル > Entity Framework で生の SQL クエリから匿名型の結果を取得する方法

Entity Framework で生の SQL クエリから匿名型の結果を取得する方法

Linda Hamilton
リリース: 2025-01-03 00:52:39
オリジナル
516 人が閲覧しました

How to Retrieve Anonymous Type Results from Raw SQL Queries in Entity Framework?

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート