我試圖fullname從我context的如下中提取:
string fullname = context.Employees.Where(e => e.EmployeeId == employeeId).Select(f => f.FullName).ToString();
在我看來,而不是fullname我得到:
Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[System.String]
在代碼中放置斷點,我看到對 string 的賦值fullname,不顯示名稱而是顯示Microsoft.Entity訊息。
uj5u.com熱心網友回復:
那是因為結果可能為空或者可能不止一個結果,
如果您想在使用 EF Core 時控制空回傳,最好使用 FirstOrDefault() 方法。
在這種情況下,它只回傳一個結果或 null。
string fullname = context.Employees.Where(e => e.EmployeeId == employeeId).FirstOrDefault().Select(f => f.FullName).ToString();
uj5u.com熱心網友回復:
這段代碼:
context.Employees.Where(e => e.EmployeeId == employeeId).Select(f => f.FullName).ToString();
產生“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[System.String]”
... 結果是因為您正在使用ToString()來獲取IQueryableLinq 運算式的字串值。它不會執行您的查詢。
如果您希望一名員工回來并想要該員工的全名:
context.Employees
.Where(e => e.EmployeeId == employeeId)
.Select(f => f.FullName)
.Single();
這告訴 EF 執行運算式以僅回傳匹配員工的全名。由于 FullName 應該是一個字串,因此不需要ToString()在Single(). 如果“employeeId”實際上可能與員工記錄不匹配,您可以使用.SingleOrDefault()并處理您可能會為員工姓名取回#null。
FirstOrDefault()應該避免使用 ,除非您期望可以有多個匹配項而您只想要第一個匹配項。它應始終與OrderBy/OrderByDescending子句一起使用,以確保每次都回傳可預測的結果。SingleOrDefault如果有兩條或更多條記錄,Using將拋出例外,如果存在Single除一條記錄以外的任何其他記錄,則使用 throw。這在您的邏輯中提供了一種保護,可以檢測您的代碼或資料狀態中的某些內容何時做出錯誤假設并應予以解決。FirstOrDefault將“隱藏”這些不良假設,通常在系統中有大量“不良資料”需要解決時才發現為時已晚。
uj5u.com熱心網友回復:
使用FirstOrDefault()得到一個序列的第一個元素。
string fullname = context.Employees.Where(e => e.EmployeeId == employeeId)
.Select(f => f.FullName)
.FirstOrDefault();
并且您應該檢查fullname == null序列是否不包含元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360042.html
標籤:C# asp.net-mvc 实体框架 林克
上一篇:用LINQ查詢替換SQL查詢
下一篇:選擇具有類的某些屬性的字典
