我試圖了解如何執行 linq 查詢。
據我所知IQueryable,查詢是在服務器端與過濾器和選擇一起評估的,并且僅在呼叫ToList()或First()方法時才執行。
但是,我無法理解如何評估以下查詢。是在客戶端還是在服務器端評估“選擇新”?
觸發器是否Select(x=> new Note)急切加載?
IQueryable<Note> query = db.Notes
.Where(x => Id == someId)
.Select(c => new Note
{
Title = x.Title
Id = x.NoteId,
});
uj5u.com熱心網友回復:
在您的情況下Select new,是如何將 DbDataReader 欄位映射到Note物件的說明。會員訪問部分就像x.Title被翻譯成讀者指令一樣dbReader.GetString(0)。
內部 LINQ 轉換器生成用于檢索資料的 SQL
SELECT
x.Title,
x.NoteId
FROM Notes x
WHERE x.Id = @someId
并生成LambdaExpression(示意性地)
(DbDataReader dr) => new Note
{
Title = dr.GetString(0),
Id = dr.GetInt32(1)
}
然后LambdaExpression編譯和快取。ToList()當 LINQ Provider 通過,等執行查詢時ToArray(),生成的 SQL 被發送到資料庫并開始列舉 DataReader 的程序。對于在編譯的 lambda 之上應用的每個 DataReader 記錄。它來自IQueryable<Note>(服務器端)IEnumerable<Note>(客戶端)。
這是非常簡單的解釋在引擎蓋下做了什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515610.html
標籤:C#林克选择实体框架核心
