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
Libérer: 2025-01-03 00:52:39
original
549 Les gens l'ont consulté

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

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

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

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

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!

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