无法将类型 'System.Data.Entity.DynamicProxies' 的对象强制转换为类型 'System.IConvertible'



我是MVC新手 ASP.NET。我有一个名为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"的对象强制转换为类型"系统.IConvertible"。

请帮忙,谢谢。

查询生成一个表示数据库行的Dept对象 - 您需要从该行.SelectDept_Id属性以获取Int32值 - 但您还需要更改代码以处理零行实际上具有匹配的Dept_Name属性值的可能性。

专业提示:一般来说,你永远不需要使用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对象而不是仅仅拥有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 = ...

相关内容

最新更新