Maison >base de données >tutoriel mysql >Comment extraire les résultats de type anonyme des requêtes SQL à l'aide d'Entity Framework ?

Comment extraire les résultats de type anonyme des requêtes SQL à l'aide d'Entity Framework ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 17:26:14302parcourir

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

Extraction de résultats de type anonyme à partir de requêtes SQL dans Entity Framework

Dans Entity Framework, l'outil SqlQuery est utilisée pour exécuter des requêtes SQL brutes et renvoyer les résultats sous forme d'objets d'un type spécifié, T. Cependant, lorsqu'ils tentent de récupérer uniquement des colonnes spécifiques d'une table à l'aide de cette méthode, les développeurs peuvent rencontrer une exception en raison de l'incompatibilité du lecteur de données avec le résultat attendu. type d'objet.

Pour surmonter cette limitation et obtenir des résultats de type anonyme, la solution réside dans l'exploitation directe du SQL brut. La méthode fournie, DynamicListFromSql, permet aux développeurs d'obtenir cette fonctionnalité.

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;
            }
        }
    }
}

Cette méthode permet aux développeurs d'exécuter des requêtes SQL et de récupérer les résultats sous la forme d'objets dynamiques, qui sont stockés sous forme de paires clé-valeur dans un Instance ExpandoObject.

Pour utiliser cette méthode dans votre propre code, appelez-la simplement comme suit :

List<dynamic> results = DynamicListFromSql(myDb,"select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();

En utilisant ceci Cette approche permet aux développeurs d'obtenir facilement des résultats de type anonyme à partir de requêtes SQL, facilitant ainsi la récupération de colonnes spécifiques ou la création de structures de données personnalisées basées sur les résultats de la requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn