如何绕过“仅无参数构造函数和初始值设定项”.'错误

本文关键字:错误 何绕过 参数 构造函数 | 更新日期: 2023-09-27 18:30:18

我正在尝试编写一个 LINQ 查询,该查询返回"DateDue"字段距离当前日期不到 8 天的行。 "到期日期"字段可以为空。 这是我的查询:

var employees = (from u in Session.Context.Users
                join cu in Session.Context.CompanyUsers
                    on u.UserId equals cu.UserId
                join c in Session.Context.Companies
                    on cu.CompanyId equals c.CompanyId
                join uc in Session.Context.UserCourses
                on cu.CompanyUserId equals uc.CompanyUserId
                join crs in Session.Context.Courses
                on uc.CourseId equals crs.CourseId
                join so in Session.Context.ServicesOffereds
                    on crs.ServicesOfferedId equals so.ServicesOfferedId
                join jt in Session.Context.JobTitles
                    on u.JobTitleId equals jt.JobTitleId
                let DaysBeforeExpiring = (new DateTime(
                                        DateTime.Now.Year,
                                        uc.DateDue.HasValue ? uc.DateDue.Value.Month : DateTime.Now.Month,
                                        uc.DateDue.HasValue ? uc.DateDue.Value.Day : DateTime.Now.Day) - DateTime.Now).TotalDays
                where DaysBeforeExpiring < 8
                where c.ParentId == companyId || c.CompanyId == companyId
                where cu.IsActive
                where uc.Passed == false &&
                    uc.DateDue > DateTime.Now &&
                    uc.DateCompleted == null
                select new NonCompliantEmployeesModel()
                {
                    UserId = u.UserId,
                    UserCourseId = uc.UserCourseId,
                    JobTitle = jt.JobTitle1,
                    CompanyId = cu.CompanyId,
                    CompanyName = c.CompanyName,
                    FirstName = u.FirstName,
                    LastName = u.LastName,
                    State = u.State,
                    EmailAddress = u.EmailAddress,
                    IsActive = cu.IsActive,
                    ServiceOffered = so.ServiceName,
                    DueDate = uc.DateDue,
                    Days = DaysBeforeExpiring
                });

但是当我运行项目时,我收到Only parameterless constructors and initializers are supported in LINQ to Entities.错误消息。 我相信这与我在查询中创建一个新的DateTime对象有关,但我不知道如何绕过它。

任何帮助/指导将不胜感激。

如何绕过“仅无参数构造函数和初始值设定项”.'错误

您可能需要

考虑使用 SqlFunctions 类的 DateDiff 函数,而不是使用该let子句,该函数专为执行更复杂的 LINQ to Entities 查询而构建。也就是说,您希望在where子句中执行以下操作:

where SqlFunctions.DateDiff("DAY", DateTime.Now, uc.DateDue) < 8

在我看来,这个函数最好的部分是DateTime参数都是可为空的,所以你甚至不需要先费心做空检查。