簡體   English   中英

無法將“System.Data.Entity.DynamicProxies”類型的 object 轉換為“System.IConvertible”類型

[英]Unable to cast object of type 'System.Data.Entity.DynamicProxies' to type 'System.IConvertible'

我是 ASP.NET MVC 的新手。 我有一個名為Depts的表,其中包含列Dept_IdDept_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.ToInt32Convert.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM