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

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

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 00:52:39565parcourir

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

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

Lorsque vous travaillez avec Entity Framework (EF), il peut être nécessaire d'exécuter des requêtes SQL brutes et de récupérer des résultats de type anonyme. Alors que SqlQuery La méthode permet d'interroger des entités de types connus, l'obtention de résultats anonymes nécessite une approche différente.

Description du problème

Supposons que vous ayez la requête SQL suivante qui récupère uniquement la colonne FirstName de la table Student :

select FirstName from student

En utilisant SqlQuery, le code suivant ne fonctionnera pas car il attend un type connu Étudiant :

var students = Context.Database.SqlQuery<Student>($"select FirstName from student").ToList();

Solution de type anonyme

Pour obtenir des résultats de type anonyme à partir de requêtes SQL brutes, vous pouvez utiliser la méthode suivante :

public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params)
{
    using (var cmd = db.Database.Connection.CreateCommand())
    {
        ...
        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 crée un ExpandoObject et le remplit avec les données extraites du lecteur de données, créant ainsi un type anonyme avec dynamique propriétés.

Usage

Pour utiliser cette méthode, appelez-la 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();

Cela renverra une liste d'objets anonymes avec des propriétés dynamiques correspondant aux colonnes de l'ensemble de résultats.

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