如何将两个LINQ连接表从Controller传递给View

时间:2013-12-12 19:55:42

标签: asp.net-mvc linq entity-framework

我有三个对象:

public class Part
    {
        [Key]
        public int ID { get; set; }
        public string Number { get; set; }
        public string Name { get; set; }
        public int descID { get; set; }

    }

public class Description
    {
        [Key]
        public int descID { get; set; }
        public string descName { get; set; }
        public string description { get; set; }
    }

public class GridPart
    {
        public string name{ get; set; }
        public string number { get; set; }
        public string description { get; set; }

    }

我正在使用LINQ加入descID列的Part和Description:

public ActionResult Index()
        {

            var myParts = from p in db.Parts
                          join d in db.Description on p.descID equals d.DescriptorID
                          select new { Description = d.description, Name = p.name};
            List<GridPart> partsList = new List<GridPart>();

            foreach (var m in myParts)
            {
                GridPart gp = new GridPart();
                gp.Name = m.name;
                gp.description = m.description;


                partsList.Add(gp);
            }
            return View(partsList);
        }

如果我只是使用Parts表,我会在视图中执行:

@model IEnumerable<MyApp.Models.Part>

如果我使用连接表,该怎么办?这使用了部件和描述,更不用说我的GridParts列表,如何通过它来显示我需要的所有数据?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

如果您将匿名类型传递给视图,则不会强类型化。您可以参考这样的模型

@Html.TextBox("Name")

@Html.Display("Name")

虽然这会起作用,但我会建议反对它 - 更好的解决方案是使用Viewmodel代替。这将使您的视图强烈输入。

编辑:再看一遍,我发现您实际上没有将匿名类型解析为您的视图。您正在解析GridParts列表。

您应该能够像尝试的那样强烈地键入您的视图 - 只需参考GridParts而不是部分。

@model IEnumerable<MyApp.Models.GridPart>