首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在日期时间中添加月份,并与Linq中的其他日期时间进行比较?

如何在日期时间中添加月份,并与Linq中的其他日期时间进行比较?
EN

Stack Overflow用户
提问于 2015-03-03 11:12:52
回答 3查看 3.1K关注 0票数 3

我有下面的控制器动作方法

代码语言:javascript
复制
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)‘方法,该方法不能转换为存储表达式.。”

请指导我如何解决这个错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-03 11:19:05

你的问题不是林克。您的问题是EF不知道如何将该语句(z.JoiningDate.AddMonths(x.Commitments.Value))转换为SQL。

如果在选择之前使用ToList(),那么它应该可以工作。

否则你应该用

代码语言:javascript
复制
EntityFunctions.AddMonths(z.JoiningDate, x.Commitments.Value)

哪个EF确实可以转换为SQL?

换句话说

代码语言:javascript
复制
.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类

票数 11
EN

Stack Overflow用户

发布于 2015-03-03 11:18:39

您可以使用EntityFunctions.AddMonths

此函数被转换为数据库中的相应函数。

用法

代码语言:javascript
复制
EntityFunctions.AddMonths(z.JoiningDate, x.Commitments.Value)
票数 4
EN

Stack Overflow用户

发布于 2015-03-03 11:22:48

您可以使用SqlFunction类:

代码语言:javascript
复制
.Where(x => SqlFunctions.DateAdd("month",x.Commitments.Value,x.JoiningDate).Month == ToDate.Value.Month)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28830390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档