0

このLINQクエリは2つのテーブルにあります

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.List2 1[<>f__AnonymousType1 [test1.Models.Album、test1.Models.Artist]]」ですが、このディクショナリにはタイプ「System.Collections.Generic」のモデルアイテムが必要です。 .IEnumerable`1[test1.Models.Album]'。

何か案が ?

4

2 に答える 2

0

アルバムのリストではなく匿名オブジェクトのリストを渡そうとしているため、例外が発生します。

ビューモデルを作成して、そのタイプをモデルとして使用できるようにすることができます。

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>
于 2012-09-06T10:29:03.780 に答える
0

新しいビューモデルを作成して、必要なすべての情報を保存します

アクションをに変更して、そのViewModelを返します

ビューを変更して新しいviewmodelタイプのモデルを取得し、必要に応じてプロパティをフェッチします。

于 2012-09-06T10:30:17.390 に答える