我有一个带有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
我做错了什么?
答案 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);
}