参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List'
Posted
技术标签:
【中文标题】参数 1:无法从 \'System.Collections.Generic.List\' 转换为 \'System.Collections.Generic.List\'【英文标题】:Argument 1: cannot convert from 'System.Collections.Generic.List' to 'System.Collections.Generic.List'参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List' 【发布时间】:2022-01-07 18:02:02 【问题描述】:我正在学习 Asp.net Core 并使用 CRUD 操作、SQL 服务器和使用实体框架构建一个简单的 Web。 当我尝试构建排序方法时,我在参数员工的这一行中出现了这个错误
return View(this.SortEmployees(employees, SortField, CurrentSortField, SortDirection));
这就是错误:
Severity Code Description Project File Line Suppression State
Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.List<EmployeesApp.Models.Employee>' to 'System.Collections.Generic.List<EmployeesApp.Controllers.Employee>' EmployeesApp
那是我的模特:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EmployeesApp.Models
[Table("Employee", Schema ="dbo")]
public class Employee
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name ="Employee ID")]
public int EmployeeId get; set;
[Required]
[Column(TypeName ="varchar(5)")]
[MaxLength(5)]
[Display(Name ="Employee Number")]
public string EmployeeNumber get; set;
[Required]
[Column(TypeName = "varchar(150)")]
[MaxLength(100)]
[Display(Name = "Employee Name")]
public string EmployeeName get; set;
[Required]
[DataType(DataType.Date)]
[Display(Name ="Date of Birth")]
[DisplayFormat(DataFormatString = "0:dd-MMM-yyyy")]
public DateTime DOB get; set;
[Required]
[DataType(DataType.Date)]
[Display(Name = "Hiring Date")]
[DisplayFormat(DataFormatString = "0:dd-MMM-yyyy")]
public DateTime HiringDate get; set;
[Required]
[Column(TypeName ="decimal(12,2)")]
[Display(Name ="Gross Salary")]
public decimal GrossSalary get; set;
[Required]
[Column(TypeName = "decimal(12,2)")]
[Display(Name = "Net Salary")]
public decimal NetSalary get; set;
[ForeignKey("Department")]
[Required]
public int DepartmentId get; set;
[Display(Name = "Department")]
[NotMapped]
public string DepartmentName get; set;
public virtual Department Department get; set;
那是我的控制器:
namespace EmployeesApp.Controllers
public enum SortDirection
Ascending,
Descending
public class Employee : Controller
HRDatabaseContext dbContext = new HRDatabaseContext();
public IActionResult Index(string SortField, string CurrentSortField, SortDirection SortDirection)
var employees = GetEmployees();
return View(this.SortEmployees(employees, SortField, CurrentSortField, SortDirection));
private List<Models.Employee> GetEmployees()
return (from Employee in dbContext.Employees
join Department in dbContext.Departments on Employee.DepartmentId equals Department.DepartmentId
select new Models.Employee
EmployeeId = Employee.EmployeeId,
EmployeeName = Employee.EmployeeName,
DOB = Employee.DOB,
HiringDate = Employee.HiringDate,
GrossSalary = Employee.GrossSalary,
NetSalary = Employee.NetSalary,
DepartmentId = Employee.DepartmentId,
DepartmentName = Department.DepartmentName
).ToList();
public IActionResult Add()
ViewBag.Department = this.dbContext.Departments.ToList();
return View();
[HttpPost]
public IActionResult Add(Models.Employee model)
ModelState.Remove("EmployeeID");
ModelState.Remove("Department");
ModelState.Remove("DepartmentName");
if (ModelState.IsValid)
dbContext.Employees.Add(model);
dbContext.SaveChanges();
return RedirectToAction("Index");
ViewBag.Department = dbContext.Departments.ToList();
return View("Add", model);
public IActionResult Edit(int ID)
HRDatabaseContext dbContext1 = dbContext;
Models.Employee data = dbContext1.Employees.Where(e => e.EmployeeId == ID).FirstOrDefault();
ViewBag.Department = this.dbContext.Departments.ToList();
return View("Add", data);
[HttpPost]
public IActionResult Edit(Models.Employee model)
ModelState.Remove("EmployeeID");
ModelState.Remove("Department");
ModelState.Remove("DepartmentName");
if (ModelState.IsValid)
dbContext.Employees.Update(model);
dbContext.SaveChanges();
return RedirectToAction("Index");
ViewBag.Department = dbContext.Departments.ToList();
return View();
public IActionResult Delete(int ID)
Models.Employee data = this.dbContext.Employees.Where(e => e.EmployeeId == ID).FirstOrDefault();
if (data != null)
dbContext.Employees.Remove(data);
dbContext.SaveChanges();
return RedirectToAction("Index");
private List<Employee> SortEmployees(List<Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
if (string.IsNullOrEmpty(sortField))
ViewBag.SortField = "EmployeeNumber";
ViewBag.SortField = SortDirection.Ascending;
else
if (currentSortField == sortField)
ViewBag.SortDirection = sortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
else
ViewBag.SortDirection = sortDirection == SortDirection.Ascending;
ViewBag.SortField = sortField;
//* create the sorting proccess
var propertyInfo = typeof(Employee).GetProperty(ViewBag.SortField);
if (ViewBag.SortDirection == SortDirection.Ascending)
employees = employees.OrderBy(e => propertyInfo.GetValue(e, null)).ToList();
else
employees = employees.OrderByDescending(e => propertyInfo.GetValue(e, null)).ToList();
return employees;
【问题讨论】:
【参考方案1】:您的控制器中的SortEmployees
方法采用List<Employee>
,在这种情况下是Controllers.Employee
,而不是您怀疑的Models.Employee
。
在这种情况下,最好的解决方案是将控制器重命名为 EmployeeController
以遵循 ASP.NET 约定。在 ASP.NET 中,控制器始终命名为 [Name]Controller
。
【讨论】:
【参考方案2】: private List<Employee> SortEmployees(List<Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
问题与上述SortEmployees
方法、其参数和使用EmployeesApp.Controllers.Employee
模型而不是EmployeesApp.Models.Employee
的返回数据有关。所以,调用这个方法的时候会报这个错误。
为了解决这个问题,尝试修改SortEmployees
方法如下:使用Models.Employee
private List<Models.Employee> SortEmployees(List<Models.Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
【讨论】:
【参考方案3】:这是由于模型类名和控制器类名相同导致没有选择正确的模态。在这种情况下,您可以在使用它的任何位置显式添加 Models.Employee 或重命名控制器名称或模型名称本身。
【讨论】:
以上是关于参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List'的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2664:无法将参数 1 从“int”转换为“int (__cdecl *)(int)”
参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List'
错误 C2664:无法将参数 1 从“int”转换为“int []”
PROCEDURE 的参数数量不正确;预期为 1,得到 0。无法从代码中确定错误