实体将所有日期时间转换为1月1日

时间:2016-08-25 14:25:45

标签: sql-server entity-framework datetime

我正在使用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上非标准的属性是否存在问题?我脑子里有一些黑客,但我真的很想“正确地”解决这个问题。

1 个答案:

答案 0 :(得分:0)

想出来 - View使用EmployeeID作为主键,而不是MonthlyRecordID。