Asp.net mvc 如何在MVC中将多个表中的列值传递给视图?
我正在显示一个名为gigs的表中的数据,但是它包含表“Bands”和“Vincement”的几个外键,所以在我的控制器中使用此代码时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
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
从问题中删除用户的类。这只是邀请某人入侵您的网站。不必回答问题。