Heim >Datenbank >MySQL-Tutorial >Wie extrahiere ich anonyme Typergebnisse aus SQL-Abfragen mit Entity Framework?

Wie extrahiere ich anonyme Typergebnisse aus SQL-Abfragen mit Entity Framework?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 17:26:14302Durchsuche

How to Extract Anonymous Type Results from SQL Queries Using Entity Framework?

Anonyme Typergebnisextraktion aus SQL-Abfragen in Entity Framework

In Entity Framework ist die SqlQuery Die Methode wird verwendet, um unformatierte SQL-Abfragen auszuführen und Ergebnisse als Objekte eines bestimmten Typs (T) zurückzugeben. Wenn Entwickler jedoch versuchen, mit dieser Methode nur bestimmte Spalten aus einer Tabelle abzurufen, kann es aufgrund der Inkompatibilität des Datenlesers mit den erwarteten zu einer Ausnahme kommen Objekttyp.

Um diese Einschränkung zu überwinden und anonyme Typergebnisse zu erhalten, besteht die Lösung darin, Roh-SQL direkt zu nutzen. Mit der bereitgestellten Methode DynamicListFromSql können Entwickler diese Funktionalität erreichen.

public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params)
{
    using (var cmd = db.Database.Connection.CreateCommand())
    {
        cmd.CommandText = Sql;
        if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); }

        foreach (KeyValuePair<string, object> p in Params)
        {
            DbParameter dbParameter = cmd.CreateParameter();
            dbParameter.ParameterName = p.Key;
            dbParameter.Value = p.Value;
            cmd.Parameters.Add(dbParameter);
        }

        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;
            }
        }
    }
}

Mit dieser Methode können Entwickler SQL-Abfragen ausführen und Ergebnisse in Form von dynamischen Objekten abrufen, die als Schlüssel-Wert-Paare innerhalb eines gespeichert werden ExpandoObject-Instanz.

Um diese Methode in Ihrem eigenen Code zu verwenden, rufen Sie sie einfach 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();

Indem Sie dies verwenden Mit diesem Ansatz können Entwickler problemlos anonyme Typergebnisse aus SQL-Abfragen erhalten, was das Abrufen bestimmter Spalten oder die Erstellung benutzerdefinierter Datenstrukturen basierend auf den Abfrageergebnissen erleichtert.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich anonyme Typergebnisse aus SQL-Abfragen mit Entity Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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