_dbEntities.Salaries.Where(x => x.EmployeeID == EmployeeID && x.MonthID == MonthID && x.CreatedDate == Year).SingleOrDefault();
我想从x.CreatedDate获取Year如何做到这一点?
答案 0 :(得分:1)
您只需检查Year
对象的DateTime
属性即可。它必须工作:
_dbEntities.Salaries.Where(x => x.EmployeeID == EmployeeID &&
x.MonthID == MonthID &&
x.CreatedDate.Year == Year)
.SingleOrDefault();
如果此列可以为空,则必须将其更改为:x.CreatedDate.Value.Year == Year
我刚刚在LinqToEntity
中针对MS Sql Server数据库进行了检查,它运行正常。
P.S: 我认为他们已删除EntityFunctions.Year()
并将其替换为此。
答案 1 :(得分:0)
在比较之前转换数据库字段值可能会达到性能,因为它会禁用此字段上的任何索引(表达式不是sargeable)。因此,虽然Farhad的解决方案可能没问题(因为你也过滤了其他高度选择性的字段),并且值得接受,但可能做得更好
var lowerBound = new DateTime(year, 1, 1);
var upperBound = new DateTime(year + 1, 1, 1);
_dbEntities.Salaries
.Where(x => x.EmployeeID == EmployeeID
&& x.MonthID == MonthID
&& x.CreatedDate >= lowerBound)
&& x.CreatedDate < upperBound)
.SingleOrDefault();