我试图将主表(用户)和链接表(帖子)中的数据传递到视图中,但是,当我在视图中无法访问任何链表信息。我正在使用使用linq 2 sql创建的模型,并且我使用LoadWith方法来包含相关表中的数据。
以下是ActionResult中的代码:
BlogModelDataContext context = new BlogModelDataContext();
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<UserModel>(c => c.PostModels);
context.LoadOptions = dlo;
var users = from u in context.UserModels
where u.UserId == WebSecurity.CurrentUserId
select u;
return View(users);
以下是ActionResults视图中的代码:
@model IEnumerable<MvcBlog.Models.UserModel>
@{
ViewBag.Title = "NewProfile";
}
<h2>NewProfile</h2>
@foreach (var item in Model)
{
@item.JoinDate
@item.Username
@foreach (var post in item.PostModels)
{
@post.
}
}
但是,当我尝试访问post表的字段时,没有显示任何内容,我收到以下警告:
错误2 foreach语句不能对类型为
的公开定义
的变量进行操作 &#39; System.Data.Linq.EntitySet&#39;因为 &#39; System.Data.Linq.EntitySet&#39;才不是 包含&#39; GetEnumerator&#39;
我想过,一旦我使用LoadWith
,我应该能够访问Post表的属性。任何帮助将不胜感激。
答案 0 :(得分:1)
使用Linq尤其是IEnumerable时要小心。您当前的select语句返回一个IEnumerable对象。这意味着在您开始迭代IEnumerable对象(即在View中)之前,linq语句实际上并未执行。通过添加.ToList()实际上会强制在该点评估枚举。
然后,您将使用PostModel将UserModel列表传递给您的视图。
总之,将.ToList()添加到linq语句中。
var users = (from u in context.UserModels
where u.UserId == WebSecurity.CurrentUserId
select u).ToList();