0

我有一个带有start dateDateTime 字段(SQL Server)的数据库表。在我的存储库中,我有一个返回所有列的“get all”方法。我还有一个带有DateTime Startdate字段的视图模型。

存储库属性:

    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

我究竟做错了什么?

4

2 回答 2

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);
}
于 2013-05-05T16:00:52.427 回答
1

您将不得不使用Single(), 或First()扩展方法。例子:

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

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

于 2013-05-05T15:26:48.877 回答