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

如何使用實體框架從 SQL 查詢中提取匿名類型結果?

Susan Sarandon
Susan Sarandon原創
2024-12-31 17:26:14280瀏覽

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

從實體框架中的SQL 查詢中提取匿名類型結果

在實體框架中,SqlQuery方法用於執行原始原始SQL 查詢並將結果傳回作為指定類型T 的物件。但是,當嘗試使用此方法僅從表中檢索特定列時,開發人員可能會遇到異常,因為資料讀取器與預期不相容。物件類型。

要克服此限制並獲得匿名類型結果,解決方案在於直接利用原始 SQL。提供的方法 DynamicListFromSql 允許開發人員實現此功能。

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查詢中取得匿名類型結果,方便檢索特定欄位或根據查詢結果建立自訂資料結構。

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

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