[英]How to return view with Outer Joins from two tables in MVC Razor
我的項目中有兩個表作為模型,如: -
public partial class TblAlbum
{
public int ID { get; set; }
public string Album { get; set; }
public string Artists { get; set; }
public Nullable<int> AudioID { get; set; }
public Nullable<int> VideoID { get; set; }
public virtual TblVideo TblVideo { get; set; }
public virtual TblAudio TblAudio { get; set; }
}
和
public partial class TblAudio
{
public int ID { get; set; }
public string Name { get; set; }
public string Alt { get; set; }
public string Artist { get; set; }
public string Image { get; set; }
public int LangID { get; set; }
public virtual TblLanguage TblLanguage { get; set; }
public virtual ICollection<TblAlbum> TblAlbums { get; set; }
}
現在我已經將ViewModel作為GetDetailsVM ,可以訪問這兩個表,並將LINQ查詢作為: -
public class GetDetailsVM
{
private MusicEntities db = new MusicEntities();
public IEnumerable<dynamic> GetAudio()
{
var AudioList = from au in db.TblAudios
join al in db.TblAlbums on au.ID equals al.AudioID into ar
from al in ar.DefaultIfEmpty()
select new { au,al };
return AudioList.ToList();
}
}
我的ViewModel(AudioAlbumVM)讀取Getaudio()應該是這樣的: -
public class AudioAlbumVM
{
public IEnumerable<dynamic> AudioObjList { get; set; }
public string AlbumName { get; set; }
}
現在我想在我的控制器中訪問這個ViewModel,然后在我的cshtml中使用它。
我的控制器: -
public ActionResult Audio()
{
ViewBag.Title = "Audio";
var AudioSummary = new GetDetailsVM();
var viewModel = new AudioAlbumVM
{
AudioObjList = AudioSummary.GetAudio().First()
};
return View(viewModel);
}
UPDATE
我的觀點(Audio.cshtml)如下: -
@model GarhwalMusic.Models.AudioAlbumVM.AudioObjList
<a class="art" href="single.html"> @Model.AudioObjList</a>
我正在經歷這個問題LINQ離開加入只能在ActionResult中工作,但我完全迷失了。 需要有關如何使用另一個ViewModel(GetDetailsVM)然后在控制器中創建AudioAlbumVM然后在cshtml中的幫助和解釋。 任何幫助是極大的贊賞!!
從你的評論中得到這個
現在我收到這個錯誤: - 傳入字典的模型項是“GarhwalMusic.Models.AudioAlbumVM”類型,但是這個字典需要一個類型為'System.Collections.Generic.IEnumerable`1的模型項[GarhwalMusic.Model s.AudioAlbumVM]”。
問題在於此代碼
var viewModel = new AudioAlbumVM //its a single model
{
AudioObjList = AudioSummary.GetAudio().First()
};
但似乎您的視圖期望IEnumerable<GarhwalMusic.Models.AudioAlbumVM>
或( List<GarhwalMusic.Models.AudioAlbumVM>
)類型的model
。 您需要將List<GarhwalMusic.Models.AudioAlbumVM>
傳遞給您的視圖,或者更改您的視圖以接受GarhwalMusic.Models.AudioAlbumVM
類型的模型。
但是看看你的代碼我假設你試圖將AudioObjList
的集合AudioObjList
給你的View。 所以你的觀點必須接受一個類型的模型
GarhwalMusic.Models.AudioAlbumVM.AudioObjList
,你需要只從你的控制器viewModel.AudioObjList
。
編輯1:添加視圖的更多詳細信息后,您在訪問數據的方式上出錯了。
你的Model.AudioObjList
是IEnumerable<dynamic>
類型的,你怎么能在Vie上打印像@Model.AudioObjList
? 我指的是這段代碼
<a class="art" href="single.html"> @Model.AudioObjList</a>
您需要將此動態類型強制轉換為您在linq中創建的對象,然后提取其屬性值。 就像是
@((yourObject)Model.AudioObjList[0]).propertyName
(yourObject)Model.AudioObjList[0]
類型將dynamic
數據轉換為類型yourObject
。
你需要[0]
因為你的AudioObjList
屬於IEnumerable<dynamic>
類型。 所以拿第一個數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.