Maison > base de données > tutoriel mysql > Comment récupérer des résultats de type anonyme à partir de requêtes SQL Entity Framework ?

Comment récupérer des résultats de type anonyme à partir de requêtes SQL Entity Framework ?

Barbara Streisand
Libérer: 2024-12-30 19:59:09
original
264 Les gens l'ont consulté

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

Résultats de type anonyme des requêtes SQL d'Entity Framework

Entity Framework permet d'exécuter des requêtes SQL brutes, mais un défi courant se pose lors de la tentative de récupération résultats anonymes. Le module natif SqlQuery La méthode attend des types spécifiques, ce qui la rend incompatible avec les résultats dynamiques ou anonymes.

Pour surmonter ce problème, une approche personnalisée utilisant les objets de connexion sous-jacents est nécessaire. Le code C# suivant fournit une solution :

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 prend une chaîne de requête SQL, ainsi qu'un dictionnaire de paramètres. Il crée et exécute la commande à l'aide de la connexion sous-jacente, lit les résultats et remplit dynamiquement un ExpandoObject avec les noms et valeurs des colonnes.

Pour utiliser cette méthode, appelez-la simplement comme ceci :

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

Cela renverra une liste d'objets anonymes dynamiques qui peuvent être facilement itérés et accessibles par nom de propriété.

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