我正在尝试在部分Web视图中显示linq连接查询。
这是我的控制器中的查询:
public ActionResult InactiveUsers()
{
using (ModelContainer ctn = new ModelContainer())
{
DateTime duration = DateTime.Now.AddDays(-3);
var inactive = from usrs in ctn.aspnet_Users
where usrs.LastActivityDate <= duration
join o in ctn.Groups on
usrs.UserId equals o.UserID
select new
{
usrs.UserName,
usrs.LastActivityDate,
o.PrimaryPhoneNumber,
};
return View(inactive.ToList());
}
}
我有点困惑的是接下来要做什么。我熟悉使用模型添加强类型视图,但在我的情况下,我有一个连接查询会发生什么?
如果有人能指出我正确的方向,我将非常感激。
感谢。
答案 0 :(得分:4)
一种解决方案是使用“ViewModel”模式。而不是创建匿名类型创建包含要显示的数据的视图模型。只需填充它并将其传递给您的视图。
使用此模式时,我们创建 强类型类 针对我们的具体观点进 场景,以及公开属性 对于所需的动态值/内容 通过我们的视图模板。控制器 然后可以填充和传递类 这些视图优化的类对我们来说 查看要使用的模板。这使得 类型安全,编译时检查, 和视图中的编辑器智能感知 模板。
答案 1 :(得分:3)
您可以为连接结果创建一个类,然后像往常一样为它创建一个类,而不是返回IEnumerable的匿名类型:
var inactive = from usrs in ctn.aspnet_Users
where usrs.LastActivityDate <= duration
join o in ctn.Groups on
usrs.UserId equals o.UserID
select new InactiveUser(usrs.UserName, usrs.LastActivityDate, o.PrimaryPhoneNumber);
使用InactiveUser类,其构造函数采用UserName,Date和PhoneNumber。