使用Entity Framework检查数据库表是否存在指定日期列表内的日期值
解决方案
通用兼容方案(适配所有EF版本)
使用EF原生支持翻译的DbFunctions.DiffDays函数实现日期部分匹配,该函数会自动忽略两个入参的时间部分,返回值为0即代表两个日期为同一天:
// 请替换YourTableName为你实际的表对应的实体类名称 bool isExist = dbContext.YourTableName .Any(record => expiriesDates.Any(date => DbFunctions.DiffDays(date, record.ComplianceExpiryDate) == 0 ));
使用该方案需要提前引入对应命名空间:EF Framework 引入System.Data.Entity,EF Core 引入Microsoft.EntityFrameworkCore。
EF Core 3.0+ 简化写法
如果你使用的是EF Core 3.0及以上版本,框架已经原生支持DateTime.Date属性的SQL翻译,可以直接用Contains方法实现匹配,写法更简洁:
bool isExist = dbContext.YourTableName .Any(record => expiriesDates.Contains(record.ComplianceExpiryDate.Date));
注意事项
你生成expiriesDates时已经调用了.Date确保所有目标日期都是零点,不存在时间部分干扰匹配的问题,无需额外处理。
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

