c#如何绕过 '只无参数构造函数和初始值设定项......' 错误

标签: Linq C#
发布时间: 2017/2/28 22:43:03
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想编写一个 LINQ 查询,返回的行,其中"付款"字段是少于 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 中查询的对象,但我不知道如何绕过它。

任何帮助/指导很被感激。

解决方法 1:

而不是使用的 let 条款,你可能想要考虑使用DateDiff函数的 SqlFunctions 类,它专门为做更复杂的 LINQ 到实体查询而建。即,你会想要做以下你 where 子句︰

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

此函数,在我看来,最好的部分是事实, DateTime 参数均可以为 null 的所以你甚至不需要麻烦的第一次将空的检查。

赞助商