簡體   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