我是MVC新手 ASP.NET。我有一个名为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"的对象强制转换为类型"系统.IConvertible"。
请帮忙,谢谢。
查询生成一个表示数据库行的Dept
对象 - 您需要从该行.Select
Dept_Id
属性以获取Int32
值 - 但您还需要更改代码以处理零行实际上具有匹配的Dept_Name
属性值的可能性。
专业提示:一般来说,你永远不需要使用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
对象而不是仅仅拥有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 = ...
。