6

我正在使用 LINQ Self Join Query 在视图上显示数据。我的 sql 表包含一些员工详细信息。我需要显示员工详细信息及其经理姓名,因为它是表中的 ManagerID

EmpID 名称 ManagerID 名称 电话 地址
1 迈克 3 开发人员 123456 德克萨斯
2 大卫 3 RM 123456 德里
3 Roger NULL GM 123456 达拉斯
4 结婚 2 开发商 123456 NY
5 约瑟夫 2 开发商 123456 新加坡
7 Ben 2 开发商 123456 孟买
8 史蒂文 3 TL 123456 班格罗尔
 

我需要将其更改为名称

我的代码在控制器操作中

var emp = from m in t.Employees
          join e1 in t.Employees on m.ManagerID equals e1.EmployeeID
          select new { Id = m.EmployeeID , 
                       Name = m.Name, 
                       Manager = e1.Name , 
                       Designation = m.Designation,
                       Phone =m.Phone ,address = m.Address };

return View(emp.Tolist());

并在视图中

@model IEnumerable <mvc4application.models.employee>

但我收到运行时错误

传入字典的模型项的类型为 System.Data.Objects.ObjectQuery 1[<>f__AnonymousType16[System.Int32,System.String, System.String,System.String,System.Nullable 1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[Mvc4application.Models.Employee]'.] System .Web.Mvc.ViewDataDictionary`1.SetModel(对象值) +405487

当然,我理解这一点,因为我的观点是使用Mvc4application.Models.Employee type.

因为我无法将其转换为模型类型。

我们可以在 MVC 中使用 SQL 视图作为模型,以便我们可以在 SQL 中加入吗?

4

1 回答 1

8

您正在返回一个匿名对象,而您的视图是强类型的IEnumerable<mvc4application.models.employee>

我强烈建议您编写一个符合您的视图要求并包含您希望在此视图中使用的信息的视图模型:

public class EmployeeViewModel
{
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public string ManagerName { get; set; }
    public string Designation { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
}

然后调整您的 LINQ 查询,以便将各种域 EF 对象投影到视图模型中:

IEnumerable<EmployeeViewModel> employees = 
    from m in t.Employees
    join e1 in t.Employees on m.ManagerID equals e1.EmployeeID
    select new EmployeeViewModel
    { 
        EmployeeID = m.EmployeeID , 
        Name = m.Name, 
        ManagerName = e1.Name,
        Designation = m.Designation,
        Phone = m.Phone,
        Address = m.Address 
    };

    return View(employees.ToList());

最后让你的视图强类型化到视图模型:

@model IList<EmployeeViewModel>

现在您可以提供信息:

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Manager name</th>
            <th>Designation</th>
            <th>Phone</th>
            <th>Address</th>
        </tr>
    </thead>
    <tbody>
        @for (var i = 0; i < Model.Count; i++)
        {
            <tr>
                <td>@Html.DisplayFor(x => x[i].EmployeeID)</td>
                <td>@Html.DisplayFor(x => x[i].Name)</td>
                <td>@Html.DisplayFor(x => x[i].ManagerName)</td>
                <td>@Html.DisplayFor(x => x[i].Designation)</td>
                <td>@Html.DisplayFor(x => x[i].Phone)</td>
                <td>@Html.DisplayFor(x => x[i].Address)</td>
            </tr>
        }
    </tbody>
</table>
于 2013-07-12T08:47:35.900 回答