Heim > Datenbank > MySQL-Tutorial > Wie rufe ich anonyme Typergebnisse aus Roh-SQL-Abfragen in Entity Framework ab?

Wie rufe ich anonyme Typergebnisse aus Roh-SQL-Abfragen in Entity Framework ab?

Linda Hamilton
Freigeben: 2025-01-03 00:52:39
Original
516 Leute haben es durchsucht

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

Anonyme Typergebnisse aus Entity Framework SQL-Abfragen

Bei der Arbeit mit Entity Framework (EF) kann es erforderlich sein, unformatierte SQL-Abfragen auszuführen und anonyme Typergebnisse abzurufen. Während EFs SqlQuery Die Methode ermöglicht das Abfragen von Entitäten bekannter Typen. Das Erhalten anonymer Ergebnisse erfordert einen anderen Ansatz.

Problembeschreibung

Angenommen, Sie haben die folgende SQL-Abfrage, die nur die Spalte „Vorname“ aus der Tabelle „Student“ abruft:

select FirstName from student
Nach dem Login kopieren

Bei Verwendung von SqlQuery funktioniert der folgende Code nicht, da er einen bekannten Typ erwartet Student:

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

Anonyme Typlösung

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;
            }
        }
    }
}
Nach dem Login kopieren

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.

Verwendung

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage