如何使用LINQ和Entity框架基于条件设置参数

时间:2016-11-09 15:53:25

标签: c# .net entity-framework linq

这是我的代码:

await ctx.Education.AsNoTracking()
        .Where(e => e.EmployeeNumber == employeeNumber)
        .Select(e => new EducationDTO {
                Id = e.EducationID,
                StartDate =  DbFunctions.CreateDateTime(e.EducationEntryYear , 1, 1, 0, 0, 0) ?? DateTime.Now,
                EndDate = DbFunctions.CreateDateTime(e.EducationGraduationYear, 1, 1, 0, 0, 0),
        })
        .ToListAsync().ConfigureAwait(false);

在某些情况下,“e.EducationEntryYear”为0,结果会返回此异常Conversion failed when converting date and/or time from character string.

将第一个参数作为当前年份的最简单方法是什么,以防e.EducationEntryYear为0

2 个答案:

答案 0 :(得分:3)

使用条件(?)运算符。

await ctx.Education.AsNoTracking()
        .Where(e => e.EmployeeNumber == employeeNumber)
        .Select(e => new EducationDTO {
                Id = e.EducationID,
                StartDate =  DbFunctions.CreateDateTime(e.EducationEntryYear == 0 ? DateTime.Now.Year : e.EducationEntryYear, 1, 1, 0, 0, 0) ?? DateTime.Now,
                EndDate = DbFunctions.CreateDateTime(e.EducationGraduationYear, 1, 1, 0, 0, 0),
        })
        .ToListAsync().ConfigureAwait(false);

答案 1 :(得分:2)

您目前的位置

e.EducationEntryYear

将其替换为

e.EducationEntryYear == 0 ? System.DateTime.Now.Year : e.EducationEntryYear