我想从x.CreatedDate获取Year如何做到这一点?

时间:2015-02-07 14:30:05

标签: linq entity-framework

_dbEntities.Salaries.Where(x => x.EmployeeID == EmployeeID && x.MonthID == MonthID && x.CreatedDate == Year).SingleOrDefault();

我想从x.CreatedDate获取Year如何做到这一点?

2 个答案:

答案 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();