これは非常に簡単に行う必要がありますが、多くの例が見つかりません。すべての投稿を対応するタグで取得し、ビューに表示したいと考えています。基本的にシンプルなブログタイプのもの。モデル、ビューモデル、コントローラー、およびビューを使用したコードを次に示します。タグを除いてすべてが機能するため、構文に明らかに問題があります。
public class MeWallPost
{
public virtual int MeWallPostId { get; set; }
public virtual string PostTitle { get; set; }
public virtual string PostContent { get; set;
public virtual DateTime PublishDate { get; set; }
public virtual ICollection<MeWallPostMeTag> MeWallPostMeTags { get; set; }
}
public class MeTag
{
public virtual int MeTagId { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<MeWallPostMeTag> MeWallPostMeTags { get; set; }
}
public class MeWallPostMeTag
{
[Key, Column(Order = 0)]
public virtual int MeWallPostId { get; set; }
[Key, Column(Order = 0)]
public virtual int MeTagId { get; set; }
public virtual MeWallPost MeWallPost { get; set; }
public virtual MeTag MeTag { get; set; }
}
----
public class MeWallPostViewModel
{
public string PostTitle { get; set; }
public string PostContent { get; set; }
public DateTime PublishDate { get; set; }
private IEnumerable<MeTag> _Tags = new List<MeTag>();
public IEnumerable<MeTag> Tags
{
get { return _Tags; }
set { _Tags = value; }
}
public IEnumerable<MeWallPostViewModel> GetPosts()
{
var db = new DatselleDB();
return from post in db.MeWallPosts
select new MeWallPostViewModel
{
PostTitle = post.PostTitle,
PostContent = post.PostContent,
PublishDate = post.PublishDate,
Tags = post.MeWallPostMeTags.Select(a => a.MeTag)
};
}
}
-----
public ViewResult Index()
{
return View(new MeWallPostViewModel());
}
------
@foreach (var item in Model.GetPosts()) {
<div class="postItem clear">
<h3>@Html.DisplayFor(modelitem => item.PostTitle)</h3>
<span class="date">@Html.DisplayFor(modelitem => item.PublishDate)</span>
<p>@Html.DisplayFor(modelItem => item.PostContent)</p>
@foreach (var tag in Model.Tags) {
@Html.DisplayFor(modelItem => tag.Name.ToString())
}
</div>
}