LINQ - 如何显示多个模型的数据?

时间:2012-09-06 10:22:30

标签: asp.net-mvc linq linq-to-sql

我在两个表上有这个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]'类型的模型项。

有什么想法吗?

2 个答案:

答案 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

更改视图以获取新视图模型类型的模型,并根据需要获取属性。