Linq连接查询显示在MVC视图中

时间:2010-11-30 21:16:21

标签: c# asp.net-mvc linq join

我正在尝试在部分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());
            }

        }

我有点困惑的是接下来要做什么。我熟悉使用模型添加强类型视图,但在我的情况下,我有一个连接查询会发生什么?

如果有人能指出我正确的方向,我将非常感激。

感谢。

2 个答案:

答案 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。