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
Libérer: 2024-12-31 17:26:14
original
307 Les gens l'ont consulté

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;
            }
        }
    }
}
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal