2015-02-07 74 views

回答

1

您可以檢查DateTime對象的Year屬性。它必須努力:

_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(),並用此代替它。

0

在比較數據庫字段值之前,它可能會達到轉換數據庫字段值的目的,因爲它會禁用此字段上的任何索引(表達式不是sargeable)。因此,儘管法哈德的解決方案可能是OK(因爲你也過濾其他高選擇性字段),值得接受,它可以好做

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