2012-09-06 58 views
0

我有兩個表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()); 
     } 

但是我很困惑我如何在我看來顯示這些數據即藝術家表的藝術家姓名和專輯表專輯名稱此LINQ查詢?

我試圖這樣的事情,但它給了我一個錯誤

@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

由於您試圖傳遞一個匿名對象列表 而不是相冊列表,您將得到例外。

您可以創建一個視圖模型,以便將該類型用作模型。

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 }; 

然後,您應該強烈地將您的視圖鍵入此類型並根據您的viewmodel編輯視圖。

@model IEnumerable<test1.Models.ArtistAlbumViewModel> 
0

創建新的視圖模型來存儲所有需要的信息

改變你的行動,以返回視圖模型

更改您的視圖來獲取新的視圖模型類型的模型,並根據需要取得屬性。

相關問題