Bei der Arbeit mit Entity Framework (EF) kann es erforderlich sein, unformatierte SQL-Abfragen auszuführen und anonyme Typergebnisse abzurufen. Während EFs SqlQuery
Angenommen, Sie haben die folgende SQL-Abfrage, die nur die Spalte „Vorname“ aus der Tabelle „Student“ abruft:
select FirstName from student
Bei Verwendung von SqlQuery
var students = Context.Database.SqlQuery<Student>($"select FirstName from student").ToList();
Um anonyme Typergebnisse aus unformatierten SQL-Abfragen zu erhalten, können Sie die folgende Methode verwenden:
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; } } } }
Diese Methode erstellt eine ExpandoObject und füllt es mit den vom Datenleser abgerufenen Daten, wodurch effektiv ein anonymer Typ mit Dynamik erstellt wird Eigenschaften.
Um diese Methode zu verwenden, rufen Sie sie wie folgt auf:
List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();
Dies gibt eine Liste anonymer Objekte mit dynamischen Eigenschaften zurück, die den Spalten in entsprechen die Ergebnismenge.
Das obige ist der detaillierte Inhalt vonWie rufe ich anonyme Typergebnisse aus Roh-SQL-Abfragen in Entity Framework ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!