0

我正在尝试将我的主表(用户)和链接表(帖子)中的数据传递到视图中,但是,当我在视图中时,我无法访问任何链接表数据。我正在使用使用 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 语句无法对
“System.Data.Linq.EntitySet”类型的变量进行操作,因为“System.Data.Linq.EntitySet”不包含“GetEnumerator”的公共定义

我想一旦我使用LoadWith我应该能够访问 Post 表的属性。任何帮助将不胜感激。

4

1 回答 1

1

使用 Linq 时要小心,尤其是 IEnumerable。您当前的 select 语句返回一个 IEnumerable 对象。这意味着直到您开始迭代 IEnumerable 对象(即在您的视图中),linq 语句才真正执行。通过添加 .ToList() 实际上会强制在该点评估该枚举。

然后,您将传递一个 UserModel 列表及其 PostModel 到您的视图。

总之,将 .ToList() 添加到您的 linq 语句中。

var users = (from u in context.UserModels
             where u.UserId == WebSecurity.CurrentUserId
             select u).ToList();
于 2013-04-29T13:48:56.147 回答