我在两个表上有这个LINQ查询
public ViewResult data()
{
var query = from a in DB.Album
join b in DB.Artists
on a.ArtistId equals b.ArtistId
where (b.ArtistId == 2)
select new { a ,b };
return View(query.ToList());
}
但是我很困惑如何在我的视图中显示这些数据,即艺术家表的艺术家姓名和专辑表专辑名称?
我正在尝试这样的事情,但它给了我一个错误
@model IEnumerable<test1.Models.Album>
@{
ViewBag.Title = "data";
}
<h2>data</h2>
@Model.Count()
<br />
<ul>
@foreach (var mod1 in Model)
{
<li>
@* @mod1.Genre.Name*@
@Html.DisplayFor(modelItem => mod1.Artist.Name)
<br />
@mod1.AlbumId
<br />
@mod1.Artist
<br />
@mod1.Title
</li>
}
</ul>
我得到的错误是
传递到字典中的模型项的类型为'System.Collections.Generic.List 1[<>f__AnonymousType1
2 [test1.Models.Album,test1.Models.Artist]]”,
但是这个字典需要一个'System.Collections.Generic.IEnumerable`1 [test1.Models.Album]'类型的模型项。
有什么想法吗?
答案 0 :(得分:0)
您正在获取异常,因为您正在尝试传递匿名对象列表 而不是专辑列表。
您可以创建一个viewmodel,以便将该类型用作模型。
public class ArtistAlbumViewModel
{
Artist Artist { get; set; }
Album Album { get; set; }
}
从查询中返回值时使用此类型。
var query = from a in DB.Album
join b in DB.Artists
on a.ArtistId equals b.ArtistId
where (b.ArtistId == 2)
select new ArtistAlbumViewModel { Album = a, Artist = b };
然后,您应该强烈键入此类型的视图,并根据您的视图模型编辑视图。
@model IEnumerable<test1.Models.ArtistAlbumViewModel>
答案 1 :(得分:0)
创建新视图模型以存储所有需要的信息
将您的操作更改为返回ViewModel
更改视图以获取新视图模型类型的模型,并根据需要获取属性。