【问题标题】:how to pass optional parameter in linq where condition如何在 linq where 条件中传递可选参数
【发布时间】:2016-01-19 23:33:51
【问题描述】:

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

现在如果FromDate 和ToDate 为空,那么我得到QueryData 计数为零。但我需要所有记录。所以谁能告诉我我怎样才能得到预期的结果。虽然FromDate 和ToDate 具有价值,但我得到了预期的结果。

【问题讨论】:

    标签: c# entity-framework linq asp.net-mvc-4


    【解决方案1】:

    根据您提供的信息

    更改以下声明:

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

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

    【讨论】:

    • 您的帖子很珍贵。我有一个非常复杂的查询,我需要检查可空变量,我遇到了异常,因为我正在使用 AND 检查它们的空条件(好像它是一个 if 子句 IF A != NULL AND A.METHODS())而我需要将它们视为 OR。如果变量为空,那么我不需要检查其子句的其余部分,因为它不会向查询添加任何过滤器,如果它不为空,那么它的子句会过滤。谢谢你:)
    【解决方案2】:

    你也可以像下面这样: 将 QueryData 分配更改为:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-09-13
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        • 1970-01-01
        相关资源
        最近更新 更多