首頁 >資料庫 >mysql教程 >如何從實體框架 SQL 查詢中檢索匿名類型結果?

如何從實體框架 SQL 查詢中檢索匿名類型結果?

Barbara Streisand
Barbara Streisand原創
2024-12-30 19:59:09256瀏覽

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

實體框架SQL 查詢的匿名類型結果

實體框架允許執行原始SQL 查詢,但在嘗試擷取時會出現常見的挑戰匿名結果。本機 SqlQuery方法需要特定類型,這使得它與動態或匿名結果不相容。

為了克服這個問題,需要使用底層連接物件的自訂方法。以下 C# 程式碼提供了一個解:

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

此方法採用 SQL 查詢字串以及參數字典。它使用底層連接來建立並執行命令,讀取結果,並使用列名稱和值動態填入 ExpandoObject。

要使用此方法,只需像這樣調用它:

List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();

這將返回動態匿名對象的列表,可以輕鬆地通過屬性名稱進行迭代和訪問。

以上是如何從實體框架 SQL 查詢中檢索匿名類型結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn