Asp.net mvc 3 Linq到实体,视图模型-日期时间
我有一个带有Asp.net mvc 3 Linq到实体,视图模型-日期时间,asp.net-mvc-3,entity-framework,linq-to-entities,Asp.net Mvc 3,Entity Framework,Linq To Entities,我有一个带有开始日期日期时间字段(SQL Server)的db表。在我的存储库中,我有一个“getall”方法返回所有列。我还有一个带有DateTime Startdate字段的viewmodel 存储库属性: public IQueryable<Module> LeadershipModules { get { return from module in context.Modules where module
开始日期
日期时间字段(SQL Server)的db表。在我的存储库中,我有一个“getall”方法返回所有列。我还有一个带有DateTime Startdate
字段的viewmodel
存储库属性:
public IQueryable<Module> LeadershipModules
{
get
{
return from module in context.Modules where module.ModuleTypeId == 2 select module;
}
}
当我尝试以下方法时:
StartDate=来自repository.LeadershipModules中的StartDate,其中StartDate.StartDate>DateTime。现在选择StartDate
我得到下面的错误消息错误
错误1无法将类型“System.Linq.IQueryable”隐式转换为“System.DateTime”控制器\ModuleController.cs 41 117 WebUI
我做错了什么?您必须使用
Single()
或First()
扩展方法。例如:
StartDate = (
from module in repository.LeadershipModules
where module.StartDate > DateTime.Now
select module.StartDate)
.First();
您定义的查询是一个
IQueryable
,它基本上是模块
对象的集合。C#不能隐式地将其转换为DateTime。您必须进行正确的映射,这意味着选择StartDate对象,而不是模块。然后执行查询并获取列表中的单个项目(第一项、最后一项、唯一项、最大值、最小值等)。您查看的内容包含多个模块,但只有一个开始日期。开始日期的具体值是多少?我想获取特定日期之后的所有模块。我是否做错了?谢谢,但我正在尝试获取所有大于今天日期的模块。
StartDate = (
from module in repository.LeadershipModules
where module.StartDate > DateTime.Now
select module.StartDate)
.First();
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);
}