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

问题描述 投票:0回答:1

我是ASP.NET MVC的新手。我有一个叫做 Depts 其中有列。Dept_IdDept_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'的对象。

请大家帮忙,谢谢。

c# sql-server asp.net-mvc
1个回答
0
投票

你的查询结果是 Dept 对象,代表一个数据库行--你需要 .SelectDept_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 = ....

© www.soinside.com 2019 - 2024. All rights reserved.