在LINQ查询中使用模型值中的列表

我处于asp.net MVC开发的非常基本的阶段。 所以有时候我很难用简单的LINQ查询来工作。

scenario-

我有一个页面,其中有一些Image和用户对该图像的评论(就像Facebook上包含用户评论的post)。

所以我从textarea保存这些注释并通过Ajax查询发送Image ID。

这是我的控制器动作方法 –

保存评论 –

  [HttpPost] public void SaveComment(CardModel card) { CardCommentTable commenttable = new CardCommentTable(); commenttable.CardComment = card.cardComment; commenttable.FKcardID = card.cardID; db.CardCommentTables.InsertOnSubmit(commenttable); db.SubmitChanges(); } 

此注释保存在CardCommentTable ,该表具有表的外键引用,即保存图像。

在查看页面上呈现图像和其他字段 –

此查询呈现Image和其他使其成为An Imagepost的字段。 喜欢titledateofsubmitLike等。

 public ActionResult CardDetails(CardModel card) { var cardDetail = (from u in db.CardTables where u.CardID == card.cardID select new CardModel { cardID = u.CardID, cardHashCode = u.CardHashCode, cardDate = u.CardDate, cardFileName = u.CardFileName, cardFilePath = u.CardFilePath, cardTitle = u.CardTitle }).ToList(); return View(cardDetail); } 

现在在cardTable我还有一个名为cardComment列,我希望从表CardCommentTable显示所有这些保存的注释。

所以我试过 –

 public ActionResult CardDetails(CardModel card) { var allsavedcomments= (from u in db.CardCommentTables where u.FKcardID == card.cardID select u).ToList(); var cardDetail = (from u in db.CardTables where u.CardID == card.cardID select new CardModel { cardID = u.CardID, cardHashCode = u.CardHashCode, cardDate = u.CardDate, cardFileName = u.CardFileName, cardFilePath = u.CardFilePath, cardTitle = u.CardTitle, cardComment = allsavedcomments // Trying to render all saved coments here. }).ToList(); return View(cardDetail); } 

视图-

 @model IEnumerable @foreach (var item in Model) {  $(function () { $('#save-comment').click(function () { var textareavalue = $('#textarea-comment').val(); $.ajax({ url: '/Home/SaveComment/', type: 'post', data: '&cardComment=' + textareavalue + '&cardID=' + '@item.cardID', success: function (data) { $('#all-comments').append(data); } }); }); });  using (Html.BeginForm()) { @Html.ValidationSummary(true) @if (Model != null) { 

@item.cardTitle

@item.cardDate.ToShortDateString() #@item.cardHashCode } else {
No More items to preview
} } Save comment
  1. @item.cardComment
}

如何在此处将List结果插入列中。

如何使用以上查询显示所有已保存的评论?

谢谢你的帮助。

我用外键关系船稍微翻新你的代码。 这将节省您对数据库使用两个不同的查询(就像您现在正在做的那样)。

所以如果你的数据库模型看起来像这样 –

在此处输入图像描述

那么你应该以这种方式在你的代码中有一个viewmodel –

 public class ImageViewModel { public string ImageId { get; set; } public string ImageUrl { get; set; } public List Comments { get; set; } } 

你的控制器动作将返回所有结果应该像这样 –

  public class ListController : Controller { public ActionResult Index() { ImageViewModel model; using (SampleEntities entities = new SampleEntities()) { model = (from p in entities.Images where p.ImageId == "1" select new ImageViewModel() { ImageId = p.ImageId, ImageUrl = p.ImageUrl, Comments = p.ImageComments.Select(pa => pa.Comment).ToList() }).FirstOrDefault(); } return View(model); } } 

最后,将显示所有图像结果的视图 –

 @model MVC.Controllers.ImageViewModel @{ ViewBag.Title = "Index"; } 

Index

ImageViewModel


@Html.DisplayNameFor(model => model.ImageId)
@Html.DisplayFor(model => model.ImageId)
@Html.DisplayNameFor(model => model.ImageUrl)
@Html.DisplayFor(model => model.ImageUrl)

@foreach (var item in Model.Comments) { @item
}

产出将是 –

在此处输入图像描述

您的cardComment属性是字符串列表; 它需要迭代才能显示。 更换:

 
  1. @item.cardComment

有:

 
    @foreach (var singleComment in Model.cardComment) {
  1. @singleComment
  2. }