_dbEntities.Salaries.Where(x => x.EmployeeID == EmployeeID && x.MonthID == MonthID && x.CreatedDate == Year).SingleOrDefault();
我想從x.CreatedDate中獲取年份如何做到這一點?我想從x.CreatedDate中獲取年份如何做到這一點?
_dbEntities.Salaries.Where(x => x.EmployeeID == EmployeeID && x.MonthID == MonthID && x.CreatedDate == Year).SingleOrDefault();
我想從x.CreatedDate中獲取年份如何做到這一點?我想從x.CreatedDate中獲取年份如何做到這一點?
您可以檢查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()
,並用此代替它。
在比較數據庫字段值之前,它可能會達到轉換數據庫字段值的目的,因爲它會禁用此字段上的任何索引(表達式不是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();