2015-06-27 53 views
0

我的方法簽名如下。只有Id是強制性的,所有其他三個參數都是可選的。我需要在where子句中處理這個問題。如果存在可選項,那麼我需要將它們添加到where子句中,否則查詢應該建立在Id上,並且可以從可選參數中獲得。EntityFrameWork查詢中的可選參數

其次,我們可以在下面的查詢中指定的比較中使用rowVersion。 (Sql Server中的rowVersion是一個時間戳)

GetRecords(int Id, int[] LocationId = null, int PayrollNo = 0, byte[] rowVersion=null) 

{ 

    var result = this.context.employees.where(x=>x.Id == id && LocationId.Contains(x.locationId) && x.payrollNo ==PayrollNo && x.rowVersion > rowVersion); 

} 

任何幫助將不勝感激。

回答

1

試試這個:

GetRecords(int Id, int[] LocationId = null, int PayrollNo = 0, byte[] rowVersion=null) 

{ 

    var result = this.context.employees.where(x=>x.Id == id); 
    if (LocationId != null) 
     result = result.Where(x=>LocationId.Contains(x.locationId)); 
    if (PayrollNo > 0) 
     result = result.Where(x=>x.payrollNo == PayrollNo); 
    if (rowVersion != null) 
     result = result.Where(x=>x.rowVersion > rowVersion); 

} 
+0

我們可以比較RowVersion這樣嗎?我的實體將RowVersion表示爲byte [],而它是SQL Server中的時間戳 – InTheWorldOfCodingApplications

+0

看起來您可能需要一種解決方法。 http://stackoverflow.com/questions/17761114/select-new-records-by-timestamp-column-with-entity-framework –