gpt4 book ai didi

c# - 如何在日期时间中添加月份并与 Linq 中的另一个日期时间进行比较?

转载 作者:行者123 更新时间:2023-11-30 19:01:30 27 4
gpt4 key购买 nike

我有以下 Controller 操作方法

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);
}

在上述方法中,Commitments 是可为空的 int,而 JoiningDate 是日期时间。当我运行它时如果显示以下错误

LINQ to Entities 无法识别 'System.DateTime AddMonths(Int32)' 方法,并且此方法无法转换为存储表达式。

请指导我如何解决此错误。

最佳答案

您的问题不是 linq。您的问题是 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 类

关于c# - 如何在日期时间中添加月份并与 Linq 中的另一个日期时间进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830390/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com