【问题标题】:LINQ - How to display data from multiple models?LINQ - 如何显示来自多个模型的数据?
【发布时间】:2012-09-06 10:22:29
【问题描述】:

我在两个表上有这个 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.List1[&lt;&gt;f__AnonymousType1 2[test1.Models.Album,test1.Models.Artist]]', 但是这本词典需要一个“System.Collections.Generic.IEnumerable`1[test1.Models.Album]”类型的模型项。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您收到异常是因为您尝试传递匿名对象列表 而不是专辑列表。

    您可以创建一个视图模型,以便将该类型用作您的模型。

    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>
    

    【讨论】:

      【解决方案2】:

      创建一个新的视图模型来存储所有需要的信息

      将您的操作更改为返回该 ViewModel

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        相关资源
        最近更新 更多