繁体   English   中英

如何在linq where condition中传递可选参数

[英]how to pass optional parameter in linq where condition

我在MVC控制器中有一个动作

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为null,那么我得到QueryData Count为Zero。 但我需要所有记录。 所以任何人都可以告诉我如何获得预期的结果。 虽然FromDateToDate有价值,但我得到了预期的结果。

根据您提供的信息

在以下声明中更改您:

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

如果FromDateToDate将等于NULL ,则不会根据s.TEST_DATE.Value检查它们。

你也可以像下面这样做:将QueryData赋值更改为:

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

我知道这是一个老问题,但如果我的代码可以帮助任何人,我会很高兴。 我认为以下实施将是简短易读:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM