我已经在这里查看了其他问题/答案,但似乎没有一个适用于我的Senario。
这是我的视图模型:
public class EmployeeListViewModel
{
public Employee Employee { get; set; }
public PaginatedList<Employee> Employees { get; set; }
public string Supervisor { get; set; }
}
顶部视图:
@model MMSystem.ViewModels.EmployeeListViewModel
控制器:
public async Task<IActionResult> Index(string searchString, string currentFilter, int? pageNumber)
{
if (searchString != null)
{
pageNumber = 1;
}
else
{
searchString = currentFilter;
}
ViewData["CurrentFilter"] = searchString;
var employeeList = (from e in _context.Employees
join s in _context.Employees on e.Id equals s.SupervisorId
select new { Employee = s, Supervisor = e.FullName });
if (!String.IsNullOrEmpty(searchString))
{
employeeList = employeeList.Where(e => e.Employee.LastName.Contains(searchString)
||e.Employee.FirstName.Contains(searchString));
}
int pageSize = 3;
return View(new EmployeeListViewModel { Employees = await PaginatedList<Employee>.CreateAsync(employeeList.AsNoTracking(), pageNumber ?? 1, pageSize) });
}
这是我的错误:
错误
我一直在尝试一切让它工作,但似乎总是存在转换或类型冲突问题。(注意:在尝试添加分页之前一切正常(
根据您的代码,我们可以发现您的代码片段(如下所示(返回包含Employee
和Supervisor
属性的匿名对象列表。
var employeeList = (from e in _context.Employees join s in _context.Employees on e.Id equals s.SupervisorId select new { Employee = s, Supervisor = e.FullName });
在这个代码片段await PaginatedList<Employee>.CreateAsync(employeeList.AsNoTracking(), pageNumber ?? 1, pageSize)
,它不能显式地将匿名对象列表转换为System.Linq.IQueryable,这导致了问题。
无法从 '
System.Linq.IQueryable<<anonymous type: MMSystem.Models.Employee Employee, string Supervisor>>
' 转换为 'System.Linq.IQueryable<MMSystem.Models.Employee>
'
要修复它,您可以尝试修改代码,如下所示。
return View(new EmployeeListViewModel { Employees = await PaginatedList<Employee>.CreateAsync(employeeList.Select(s=>s.Employee).AsNoTracking(), pageNumber ?? 1, pageSize) });
此外,您可以参考本教程的示例,该示例显示了如何实现分页等功能。