Maison >base de données >tutoriel mysql >Comment récupérer les résultats d'une requête SQL anonyme à l'aide d'Entity Framework ?

Comment récupérer les résultats d'une requête SQL anonyme à l'aide d'Entity Framework ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 02:36:24631parcourir

How to Retrieve Anonymous SQL Query Results Using Entity Framework?

Récupération des résultats de requêtes SQL anonymes dans Entity Framework

Entity Framework fournit l'outil SqlQuery méthode pour exécuter du SQL brut et mapper les résultats à des entités spécifiques. Cependant, pour récupérer des résultats anonymes, une approche différente est nécessaire.

Une solution consiste à utiliser la méthode brute SqlConnection et ExecuteReader pour récupérer les données et créer manuellement des objets anonymes basés sur l'ensemble de résultats. Voici une méthode d'extension personnalisée qui peut être utilisée :

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

Avec cette méthode, vous pouvez récupérer des résultats anonymes à partir de requêtes SQL 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();

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