我正在尝试将解决方案升级到新的 Core Framework 3.0.0。现在我有一个我不明白的小问题。
看,这种方法在 2.2.6 中没有问题:
public async Task<IEnumerable<ApplicationUser>> GetBirthdayUsersCurrentMonth()
{
return await ApplicationDbContext.Users
.Where(x => x.Gender != ApplicationUser.GenderTypes.generic)
.Where(x => x.BirthDate.GetValueOrDefault().Month == DateTime.Now.Month)
.Where(x => x.RetireDate == null)
.OrderBy(x => x.BirthDate.GetValueOrDefault())
.ToListAsync();
}
现在在 3.0.0 中,我收到一个 Linq 错误:
InvalidOperationException:LINQ 表达式 'Where(source: Where(source: DbSet, predicate: (a) => (int)a.Gender != 0), predicate: (a) => a.BirthDate.GetValueOrDefault().Month == DateTime.Now.Month)' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估
当我禁用此行时:
.Where(x => x.BirthDate.GetValueOrDefault().Month == DateTime.Now.Month)
错误消失了,但我当然会得到所有用户。而且我在这个查询中看不到错误。这可能是 EF Core 3.0.0 中的错误吗?