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
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
var students = Context.Database.SqlQuery<Student>($"select FirstName from student").ToList();
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.
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!