无法转换String Type' String'到MVCTutorial.Model.tblDept'

时间:2017-11-13 12:07:27

标签: c# asp.net-mvc

我试图通过以下代码显示要查看的员工列表。我有tblemployee课程和tblDept课程。

EmployeeViewModel EmployeeVM = new EmployeeViewModel();
MvcEmployeeEntities db = new MvcEmployeeEntities();
List<TblEmployee> emplist = db.TblEmployees.ToList();

        List<EmployeeViewModel> EmpVMlist = emplist.Select(
            x => new EmployeeViewModel { 
                Emp_ID = x.Emp_ID, 
                Emp_Name = x.Emp_Name, 
                Emp_Number = x.Emp_Number, 
                DeptID = x.DeptID, 
              **DeptName = x.tblDept.DeptName** }).ToList();

Return(EmpVMlist);

此时deptName显示错误,表示字符串无法隐式转换为 NamespaceModel 类。

他们是否有办法隐式转换它?

注意我有一个Public virtual tblDept deptName {get;set;} ,因为它来自tbldept。class

public class EmployeeViewModel
{
    public int Emp_ID { get; set; }
    public string Emp_Name { get; set; }
    public Nullable<int> Emp_Number { get; set; }
    public Nullable<int> DeptID { get; set; }
    //virtual to use an other tble with in this tble, to get set there tblValues
    public virtual tblDept DeptName { get; set; }
}

1 个答案:

答案 0 :(得分:0)

错误是自解释的。您的LINQ x.tblDept.DeptName表达式中的Select将读取您DeptName记录的关联Department的{​​{1}}属性值正在阅读,但您正在尝试将属性值设置为类型为Employee的{​​{1}}属性!所以基本上你试图将苹果类型分配给橙色!

理想情况下,您的视图模型不应使用您的实体类。 查看模型是特定于视图的模型。保持简单和精益。大多数情况下,简单 - 瘦 - 平视图模型是您所需要的。

因此,请将视图模型中的DeptName属性更改为字符串。

DeptName

在视图模型中仅保留视图中绝对需要的属性。无需复制整个实体类结构。