我使用Entity从客户的SQL表中提取一些数据,我想根据日期对其进行过滤。客户将每行的相关月份存储为YYYYMM格式的6位字符串。我尝试解决这个问题(因为我不能将列类型更改为datetime2)是创建一个SQL视图,它执行以下操作来创建一个表示月份的datetime2列:
CONVERT(datetime2, MON.Month + '01') AS CoveredMonth
然后在。net内部,我有两个DateTime对象,yearStart和yearEnd,分别表示2016年1月1日和2017年1月1日,以及我正在查找其记录的特定员工。我有以下代码尝试在此列上进行过滤:
IList<MonthlyRecord> monthlyRecords = m_LTContext.MonthlyRecords
.Where(r => r.EmployeeID == employee.ID && r.CoveredMonth >= yearStart && r.CoveredMonth < yearEnd)
.ToList<MonthlyRecord>();
当我放置一个断点来检查返回到monthlyRecords
的内容时,我看到了记录的预期计数。但是,每个记录的CoveredMonth
设置为2016年1月1日。在SQL中运行相同的查询,我再次得到相同的计数记录,但适当的日期:1月1 '16,2月1 '16等。
是否有一个问题与实体以某种方式映射属性是非标准的视图?在我的脑海中有一些技巧,但我真的想"正确"地解决这个问题。
发现了——View使用EmployeeID作为主键,而不是MonthlyRecordID。