【问题标题】:Linq to Entities, ViewModel - DateTimeLinq to Entities, ViewModel - DateTime
【发布时间】:2013-05-05 15:23:17
【问题描述】:

我有一个带有start date DateTime 字段的数据库表(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 &gt; DateTime.Now select startDate

我收到错误消息下方的错误

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

我做错了什么?

【问题讨论】:

  • 您的视图包含多个模块,但只有一个开始日期。开始日期的确切值是多少?
  • 我想获取某个日期之后的所有模块。我做错了吗?

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


【解决方案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);
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,但我正在尝试获取所有大于今天日期的模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多