我是ASP.NET MVC的新手。我有一个叫做 Depts
其中有列。Dept_Id
和 Dept_Name
我希望找到 Dept_Name
基于 Dept_Id
并将此值设置为另一个类型为int的变量。
var did = db.Depts.SingleOrDefault(z => z.Dept_Name == dept);
int deptId = Convert.ToInt32(did);
这样做之后,我得到了错误信息
无法将类型为'System.Data.Entity.DynamicProxies.Dept_34CEB454D725BAF574CE929243347C1BAB865FAF84BBDFEBF96CE2DE758CAFF0'的对象投递到类型为'System.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时启用了nullable-reference-types(每个人都应该启用这个),你需要使用 Dept? department = ...
而不是 Dept department = ...
.