我正在使用LINQ Self Join Query在视图上显示数据。我的sql表包含一些员工详细信息。我需要用他们的经理名称显示员工详细信息 因为它是表中的ManagerID
EmpID Name ManagerID Designation Phone Address 1 Mike 3 Developer 123456 Texas 2 David 3 RM 123456 Delhi 3 Roger NULL GM 123456 Dallas 4 Marry 2 Developer 123456 NY 5 Joseph 2 Developer 123456 Singapore 7 Ben 2 Developer 123456 Mumbai 8 Steven 3 TL 123456 Banglore
我需要将其更改为名称
我的代码在控制器操作中
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__AnonymousType1
6 [System.Int32,System.String, System.String,System.String,System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [Mvc4application.Models.Employee]”。] System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value)+405487
关闭课程我理解这一点,因为我的观点是使用Mvc4application.Models.Employee type
。
因为我无法将其转换为模型类型。
我们可以在MVC中使用SQL视图作为模型,以便我们可以在SQL中加入吗?
答案 0 :(得分: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>