Asp.net mvc 如何在MVC中将多个表中的列值传递给视图?

Asp.net mvc 如何在MVC中将多个表中的列值传递给视图?,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我正在显示一个名为gigs的表中的数据,但是它包含表“Bands”和“Vincement”的几个外键,所以在我的控制器中使用此代码时 string user = User.Identity.GetUserId(); var yourgigs = (from g in dbg.gigs from v in dbg.Venues

我正在显示一个名为gigs的表中的数据,但是它包含表“Bands”和“Vincement”的几个外键,所以在我的控制器中使用此代码时

            string user = User.Identity.GetUserId();

            var yourgigs = (from g in dbg.gigs
                                   from v in dbg.Venues
                                   from b in dbg.Bands
                                   from ga in g.gigsaccasses
                                   where (ga.Id == user &&
                                   v.venueid == g.venueid &&
                                   b.bandid == g.bandid)
                                   select g);

            return View(yourgigs);
它在视图中显示bandid和venueid,它们是无意义的整数。我将如何用我认为是b.bandname、v.VenuName以及添加v.address1和v.city的内容替换这些内容?执行此操作的SQL语句是

SELECT        bands.bandname, venues.venuename, venues.address1, venues.city, gigs.whatdate, gigs.starttime
FROM            gigs INNER JOIN
                         bands ON gigs.bandid = bands.bandid INNER JOIN
                         gigsaccass ON gigs.gigid = gigsaccass.gigid INNER JOIN
                         dbo.AspNetUsers ON gigsaccass.Id = dbo.AspNetUsers.Id INNER JOIN
                         venues ON gigs.venueid = venues.venueid
                         WHERE dbo.AspNetUsers.Id = //some user//
我确实尝试过使用匿名类型,例如:

var yourgigs=(来自dbg.gigs中的g
从dbg场地的v开始
从dbg带中的b开始
来自g.Gigsaccases的ga
其中(ga.Id==用户&&
v、 venueid==g.venueid&&
b、 bandid==g.bandid
选择新的
{
bandname=b.bandname,
VenuName=v.VenuName,
地址1=v.address1,
城市,
whatdate=g.whatdate,
starttime=g.starttime

});
此处不能使用匿名类。视图需要知道如何使用模型,它需要类型信息,但是:“类型名称由编译器生成,在源代码级别不可用”

你不能传递这样的物体

您需要创建表示数据集中的行的类,并返回填充对象的列表


作为不太受欢迎的替代方案,您可以使用
动态

MVC中的M代表模型,您需要的是MVC的三个主要租户之一


您需要一个对象,该对象封装了视图上显示的所有信息。

为视图创建模型被认为是最佳做法。这是一个附加层,将项目(实体模型)的存储与其表示分离

 var yourgigs = (from g in dbg.gigs
                            from v in dbg.Venues
                            from b in dbg.Bands
                            from ga in g.gigsaccasses
                            where (ga.Id == user &&
                            v.venueid == g.venueid &&
                            b.bandid == g.bandid
                            select new GigViewModel
                            {
                                bandname = b.bandname,
                                venuename = v.venuename,
                                address1 = v.address1,
                                city = v.city,
                                whatdate = g.whatdate,
                                starttime = g.starttime
                            });

public class GigViewModel
{
    public string bandname { get; set; }
    public string venuename { get; set; }
    public string address1 { get; set; }
    public string city { get; set; }
    public DateTime whatdate { get; set; }
    public Timespan starttime { get; set; }
}
当从视图模型中持久化数据时,请使用AutoMapper或类似的工具来复制视图模型和实体模型之间名称匹配的属性

在视图中使用新的视图模型:

@model IEnumerable

从问题中删除用户的类。这只是邀请某人入侵您的网站。不必回答问题。