Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NETMVC5中使用Linq从数据库检索数据时,如何将对象列表从控制器传递到视图_Linq_Asp.net Mvc 5 - Fatal编程技术网

在ASP.NETMVC5中使用Linq从数据库检索数据时,如何将对象列表从控制器传递到视图

在ASP.NETMVC5中使用Linq从数据库检索数据时,如何将对象列表从控制器传递到视图,linq,asp.net-mvc-5,Linq,Asp.net Mvc 5,我试图将对象列表从控制器传递到视图,在视图中使用LINQ从数据库检索对象的属性。型号代码如下所示: public class Department { [Key] public int DepartmentId { get; set; } [Required(ErrorMessage = "Enter Department Name")] [DisplayName("Department Name")]

我试图将对象列表从控制器传递到视图,在视图中使用LINQ从数据库检索对象的属性。型号代码如下所示:

public class Department
    {

        [Key]
        public int DepartmentId { get; set; }

        [Required(ErrorMessage = "Enter Department Name")]
        [DisplayName("Department Name")]
        public string DepartmentName { get; set; }
    }
控制器代码为:

public ActionResult ShowDepartments()
        {

          var departmentList = db.Deapartment.Select(x => new
            {
                x.DepartmentId,
                x.DepartmentName

            }).ToList();


            return View(departmentList);
        }
视图代码为:

@model List<PractiseMVC11_17_2017.Models.Department>

@{
    ViewBag.Title = "ShowDepartments";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Show Departments</h2>



        <div>

    <table class="table table-bordered table-hover">
        <tbody>

            @foreach (var department in Model)
            {

                <tr>
                    <td>
                        @department.DepartmentId
                    </td>

                    <td>
                        @department.DepartmentName

                    </td>

                </tr>

            }

        </tbody>



    </table>


</div>


}
但当我运行该项目时,它显示以下异常:


异常详细信息:System.InvalidOperationException:传递到字典的模型项的类型为“System.Collections.Generic.List1[f_uAnonymousType32[System.Int32,System.String]]”,但此字典需要类型为“System.Collections.Generic.List`1[PracticesmVC11_17_2017.Models.Department]的模型项“。

您的视图被强类型化为Department类对象的集合。但是在您的操作方法中,您正在使用此代码创建一个新的匿名对象列表

db.Deapartment.Select(x => new
                             {
                                x.DepartmentId,
                                x.DepartmentName

                     })
这里,您正在为db.dePartment集合中的每个项创建一个具有DepartmentId和DepartmentName属性的匿名对象。您正在向视图传递上述代码的结果,这是一个匿名对象列表。您的视图现在得到的类型与它的强类型不同,因此您得到的是异常

因此,只需将ToList传递给db.department并将其传递给视图

public ActionResult ShowDepartments()
{
    var departmentList = db.Deapartment.ToList();
    return View(departmentList);
}

这里departmentList变量将是department对象的集合。

Shyju answer有效,因为传递给视图的对象恰好与数据库对象相同。情况并非总是如此,事实上,如果不是这样,情况会更好

正确的处理方法是创建命名对象:

      var departmentList = db.Deapartment.Select(x => new Department
        {
            x.DepartmentId,
            x.DepartmentName

        }).ToList();
我会使用LINQ语法,但lambda语法也同样适用

      var departmentList = 
                  (from x in db.Deapartment
                   select new Department
                  {
                       x.DepartmentId,
                       x.DepartmentName
                  }).ToList();