[英]Unable to cast object of type 'System.Data.Entity.DynamicProxies' to type 'BugTrackingSystem.BugDescriptor'
[英]Unable to cast object of type 'System.Data.Entity.DynamicProxies' to type 'System.IConvertible'
我是 ASP.NET MVC 的新手。 我有一個名為Depts
的表,其中包含列Dept_Id
和Dept_Name
我希望根據Dept_Id
Dept_Name
此值設置為另一個 int 類型的變量。
var did = db.Depts.SingleOrDefault(z => z.Dept_Name == dept);
int deptId = Convert.ToInt32(did);
這樣做后,我得到了錯誤
無法將類型為“System.Data.Entity.DynamicProxies.Dept_34CEB454D725BAF574CE929243347C1BAB865FAF84BBDFEBF96CE2DE758CAFF0”的 object 轉換為類型“System.IConvertible”。
請幫忙,謝謝。
您的查詢產生一個代表數據庫行的Dept
object - 您需要.Select
行中的Dept_Id
屬性以獲取Int32
值 - 但您還需要更改代碼以處理零行實際上具有匹配的Dept_Name
屬性值的可能性.
Protip:一般來說,您永遠不需要使用Convert.To...
方法(如Convert.ToInt32
、 Convert.ToString()
等 - 除了 Base64 方法,但我離題了)。
將您的代碼更改為:
Int32? departmentId = db.Depts
.Where( d => d.Dept_Name == dept )
.Select( d => (Int32?)d.Dept_Id )
.SingleOrDefault();
if( departmentId != null )
{
// do stuff
}
else
{
// there is no Dept where Dept_Name == dept, so show an error message?
}
但是保留Dept
object 而不僅僅是擁有departmentId
值可能更有用(並且 nullable-ints 使用總是必須添加.Value
的東西可能會很痛苦),所以考慮使用這個:
Dept department = db.Depts
.Where( d => d.Dept_Name == dept )
.SingleOrDefault();
if( department != null )
{
Int32 departmentId = department.Dept_Id;
// do stuff:
}
else
{
// there is no Dept where Dept_Name == dept, so show an error message?
}
如果您使用啟用了可空引用類型的 C# 8.0(並且每個人都應該啟用此功能),您需要使用Dept? department =...
Dept? department =...
而不是Dept department =...
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.