2016-11-09 53 views
1

条件这是我的代码:我设置的参数如何基于使用LINQ和Entity Framework

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

+0

替换它与'e.EducationEntryYear == 0只需更换'e.EducationEntryYear'? DateTime.Now.Year:e.EducationEntryYear' – itsme86

+0

你有没有试过e.EducationEntryYear> 0?e.EducationEntryYear:2016? –

+0

您必须先将DateTime.Now.Year保存到变量中 –

回答

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

如果您目前有

e.EducationEntryYear 

e.EducationEntryYear == 0 ? System.DateTime.Now.Year : e.EducationEntryYear 
相关问题