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

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

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 19:59:09256Durchsuche

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

Anonyme Typergebnisse aus Entity Framework SQL-Abfragen

Entity Framework ermöglicht die Ausführung von Roh-SQL-Abfragen, beim Abrufversuch tritt jedoch häufig eine Herausforderung auf anonyme Ergebnisse. Die native SqlQuery Die Methode erwartet bestimmte Typen und ist daher nicht mit dynamischen oder anonymen Ergebnissen kompatibel.

Um dies zu umgehen, ist ein benutzerdefinierter Ansatz unter Verwendung der zugrunde liegenden Verbindungsobjekte erforderlich. Der folgende C#-Code bietet eine Lösung:

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

Diese Methode benötigt eine SQL-Abfragezeichenfolge sowie ein Wörterbuch mit Parametern. Es erstellt und führt den Befehl mithilfe der zugrunde liegenden Verbindung aus, liest die Ergebnisse und füllt ein ExpandoObject dynamisch mit den Spaltennamen und -werten.

Um diese Methode 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();

Dadurch wird eine Liste dynamischer anonymer Objekte zurückgegeben, die leicht iteriert und über den Eigenschaftsnamen aufgerufen werden können.

Das obige ist der detaillierte Inhalt vonWie rufe ich anonyme Typergebnisse aus Entity Framework SQL-Abfragen ab?. 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