我有下面的控制器动作方法
public ActionResult BondCompletion(DateTime? ToDate)
{
List<BondCompletionViewModel> bondCompletionViewModel = new List <BondCompletionViewModel>();
if (ToDate != null)
{
bondCompletionViewModel = db.Employees.Select(y => new
{
y.JoiningDate ,
y.Commitments ,
y.EmployeeId ,
y.Name
})
.Where(x => x.JoiningDate.AddMonths(x.Commitments.Value).Month == ToDate.Value.Month)
.Select(z => new BondCompletionViewModel
{
EmployeeId = z.EmployeeId.Value,
EmployeeName = z.Name,
StartDate = z.JoiningDate,
EndDate = z.JoiningDate//.AddMonths(x.Commitments.Value)
}).ToList();
}
return View(bondCompletionViewModel);
}在上面的方法中,承诺是空的,int是空的,JoiningDate是日期时间。当我运行它时,如果显示以下错误
“LINQ实体不识别'System.DateTime AddMonths(Int32)‘方法,该方法不能转换为存储表达式.。”
请指导我如何解决这个错误。
发布于 2015-03-03 11:19:05
你的问题不是林克。您的问题是EF不知道如何将该语句(z.JoiningDate.AddMonths(x.Commitments.Value))转换为SQL。
如果在选择之前使用ToList(),那么它应该可以工作。
否则你应该用
EntityFunctions.AddMonths(z.JoiningDate, x.Commitments.Value)哪个EF确实可以转换为SQL?
换句话说
.Select(z => new BondCompletionViewModel
{
EmployeeId = z.EmployeeId.Value,
EmployeeName = z.Name,
StartDate = z.JoiningDate,
EndDate = EntityFunctions.AddMonths(z.JoiningDate, x.Commitments.Value)
}).ToList();编辑: DbFunctions是用来代替EntityFunctions的新的EF 6类
发布于 2015-03-03 11:18:39
您可以使用EntityFunctions.AddMonths
此函数被转换为数据库中的相应函数。
用法
EntityFunctions.AddMonths(z.JoiningDate, x.Commitments.Value)发布于 2015-03-03 11:22:48
您可以使用SqlFunction类:
.Where(x => SqlFunctions.DateAdd("month",x.Commitments.Value,x.JoiningDate).Month == ToDate.Value.Month)https://stackoverflow.com/questions/28830390
复制相似问题