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
Barbara Streisandoriginal
2024-12-30 19:59:09256parcourir

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

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

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!

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