我正在使用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中运行相同的查询我再次获得相同的计数记录,但相应的日期:16年1月1日, 16年2月1日,等等。
Entity以某种方式映射View上非标准的属性是否存在问题?我脑子里有一些黑客,但我真的很想“正确地”解决这个问题。
答案 0 :(得分:0)
想出来 - View使用EmployeeID作为主键,而不是MonthlyRecordID。