Linq to Entities,ViewModel - DateTime

时间:2013-05-05 15:23:18

标签: asp.net-mvc-3 entity-framework linq-to-entities

我有一个带有start date DateTime字段(SQL Server)的db表。在我的存储库中,我有一个“get all”方法,它返回所有列。我还有一个带DateTime Startdate字段的viewmodel。

存储库属性:

    public IQueryable<Module> LeadershipModules
    {
        get
        {
            return from module in context.Modules where module.ModuleTypeId == 2 select module;
        }
    }

在我的控制器中,如何将StartDate字段设置为DateTime个对象?

我的控制器

    public ActionResult Leadership()
    {
        var viewModel = new LeadershipModulesViewModel
        {
            LeadershipModules = repository.LeadershipModules,
            StartDate = **???**

        };

        return View(viewModel);
    }

当我尝试以下操作时:

StartDate = from startDate in repository.LeadershipModules where startDate.StartDate > DateTime.Now select startDate

我收到错误消息

以下的错误

Error 1 Cannot implicitly convert type 'System.Linq.IQueryable<Domain.Module>' to 'System.DateTime' Controllers\ModuleController.cs 41 117 WebUI

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您必须使用Single()First()扩展方法。例如:

StartDate = (
    from module in repository.LeadershipModules
    where module.StartDate > DateTime.Now 
    select module.StartDate)
    .First();

您定义的查询是IQueryable<Module>,它基本上是Module个对象的集合。 C#不能将其隐式地转换为DateTime。您必须进行正确的映射,这意味着选择StartDate对象,而不是模块。并执行查询并获取列表中的单个项目(第一个,最后一个,唯一的,最大值,最小值等)。

答案 1 :(得分:1)

public ActionResult Leadership()
{
    DateTime startDate = DateTime.Now;
    var modules = repository.LeadershipModules.Where(m => m.StartDate > startDate);

    var viewModel = new LeadershipModulesViewModel
    {
        LeadershipModules = modules,
        StartDate = startDate
    };

    return View(viewModel);
}