2015-10-21 67 views
1

我在MVC控制器現在如何通過可選參數在LINQ where條件

public ActionResult ExportExcel(string ReportType,DateTime? FromDate,DateTime? ToDate) 
{ 
    var query = UnitOfWork.RepoTestResAnalysis.GetAll(); 
    var QueryData = query.Where(s => s.MSO == ms && (FromDate != null && (s.TEST_DATE.Value >= FromDate)) && (ToDate!=null && (s.TEST_DATE.Value<=ToDate))).ToList(); 
} 

一個動作如果FromDateToDate爲空,然後我得到QueryData計數爲零。但我需要所有記錄。所以誰能告訴我如何得到預期的結果。雖然FromDate & ToDate有價值,那麼我得到預期的結果。

回答

1

按照您

改變你下面的語句提供

的信息:如果FromDate或者ToDate將等於NULL

var QueryData = query.Where(s => s.MSO == ms && (FromDate != null && (s.TEST_DATE.Value >= FromDate)) && (ToDate!=null && (s.TEST_DATE.Value<=ToDate))).ToList(); 

var QueryData = query.Where(s => s.MSO == ms && (FromDate == null || (s.TEST_DATE.Value >= FromDate)) && (ToDate == null || (s.TEST_DATE.Value<=ToDate))).ToList(); 

,它不會檢查m對s.TEST_DATE.Value

0

你可以像下面還有: 更改QueryData分配:

var QueryData = query.Where(s => s.MSO == ms && 
(s.TEST_DATE.Value >= (FromDate ?? DateTime.MinValue)) && 
(s.TEST_DATE.Value <= (ToDate ?? DateTime.MaxValue))).ToList(); 
0

我知道這是一個老問題,但我會很高興,如果我的代碼可以幫助任何人。 我想下面的實現將是短期和易於閱讀:

public ActionResult SomeMethod(string ReportType, DateTime? FromDate, DateTime? ToDate) 
{ 
    var query = UnitOfWork.RepoTestResAnalysis.GetAll(); 
    var QueryData = query.Where(x => x.DateField >= (FromDate ?? x.DateField) && x.DateField <= (ToDate ?? x.DateField).ToList();     
}