2016-10-19 61 views
-1

我有兩個模型,文章和評論。帖子PK是評論中的外鍵(一對多)。然後我有一個ViewModel的帖子和評論。在視圖中顯示一次外鍵?

這是我的控制器

public ActionResult Index() 
{ 
    var model = db.Comments.Include(p => p.Post) 
     .OrderByDescending(p => p.CommentId).ToList() 
     .Select(p => new ListCommentsViewModel 
     { 
      Comment = p.PostComment, 
      Message = p.Post.Message 
     }).ToList(); 

    return View(model); 
} 

我將外鍵值後過濾,因此,外鍵的值將始終是相同的。我怎樣才能在視圖中顯示一次?這是工作

@model IEnumerable<FreePost.Viewmodels.ListCommentsViewModel> 
@foreach (var item in Model) 
      { 
       @Html.DisplayFor(modelItem => item.Message) 
       @Html.DisplayFor(modelItem => item.Comment) 
      } 

但我想用@Html.DisplayFor(modelItem => item.Message)外的foreach意義上的外鍵信息的值將始終是相同的。

更新

這是我的模型的文章和評論

public class Post 
    { 
     public Post() 
     { 
      Vote = new HashSet<Vote>(); 
      Comment = new HashSet<Comment>(); 
     } 

     public int PostId { get; set; } 
     public string Message { get; set; } 
     public DateTime MessageDate { get; set; } 

     public virtual ApplicationUser User { get; set; } 
     public virtual ICollection<Vote> Vote { get; set; } 

     public ICollection<Comment> Comment { get; set; } 
    } 

    public class Comment 
    { 
     public Comment() { } 

     public int CommentId { get; set; } 
     public string PostComment { get; set; } 
     public DateTime CommentDate { get; set; } 

     public int PostRefId { get; set; } 

     [ForeignKey("PostRefId")] 
     public virtual Post Post { get; set; } 
    } 

更新2

我的代碼我得到這樣的結果在視圖

post 1 
Comment 1 
post 1 
Comment 2 
post 1 
Comment 3 

我想有這樣的結果(檢測後是一樣的FK)

post 1 
Comment 1 
Comment 2 
Comment 3 
+0

什麼是交表PK費爾德的名字嗎? –

+0

帖子中的PK是PostId - > public int PostId {get;組; } – Xtreme

回答

0

嘗試在LINQ查詢加入

var model = (from p in db.Post 
      join c in db.Comments on p.PostId equals c.PostId 
      select new { p.Post, c.PostComment}) 
      .OrderByDescending(p => p.CommentId); 

視圖頁面

@model IEnumerable<FreePost.Viewmodels.ListCommentsViewModel> 
string post=""; 
@foreach (var item in Model) 
{ 
    if(post!=item.Post) 
    { 
    @Html.DisplayFor(modelItem => item.Post) 
    } 
    @Html.DisplayFor(modelItem => item.PostComment) 
    post=item.Post; 
} 

var model = (from p in db.Post 
      join c in db.Comments on p.PostId equals c.PostId into g 
      select new { p.Post, 
      comments = g.Select(x =>x.PostComment)}).AsEnumerable() 
      .Select(x => new {x.Post,comments = String.Join(",",x.PostComment)}) 
      .OrderByDescending(p => p.CommentId); 

視圖頁面

@model IEnumerable<FreePost.Viewmodels.ListCommentsViewModel> 

    @foreach (var item in Model) 
    { 
     @Html.DisplayFor(modelItem => item.Post) 
     @Html.DisplayFor(modelItem => item.comments) //All comments display in single line with splited by ",".If you want different line using split function to split the string 

    } 
+0

這將在視圖中顯示帖子「@ Html.DisplayFor(modelItem => item.Post)」只有一次?我可以看到你仍然有item.Post在foreach。 – Xtreme

+0

我編輯了我的答案。請立即檢查。 –