2015-10-21 71 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();     
}