DataLoadOptions没有加载链接表

本文关键字:链接表 加载 DataLoadOptions | 更新日期: 2023-09-27 18:11:15

我试图将数据从我的主表(用户)和链接表(帖子)传递到视图中,但是,当我在视图中我无法访问任何链接表数据。我正在使用使用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表的字段时,没有显示任何内容,并且我得到以下警告:

foreach语句不能对
类型的变量进行操作"System.Data.Linq。EntitySet",因为"System.Data.Linq。EntitySet没有包含'GetEnumerator'的公共定义

我认为一旦我使用LoadWith,我应该能够访问Post表的属性。

DataLoadOptions没有加载链接表

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

你将传递一个UserModels的列表和它们的PostModels给你的View。

总之,在linq语句中添加. tolist()。
var users = (from u in context.UserModels
             where u.UserId == WebSecurity.CurrentUserId
             select u).ToList();