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表的属性。
使用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();