2014-08-28 33 views
1

說我有其中需要insuredNumber中填充下述方法,但剩餘的三個參數可包含默認值,如下LINQ實體濾除默認參數

方法簽名:

public List<Portal_SurveyRecommendations> LoadSurveyRecommendations(string insuredNumber, string surveyLocationNumber, DateTime dateIssuedFilter, DateTime dateCompletedFilter) 
{ 
} 

默認值:

surveyLocationNumber = "-1" 
dateIssuedFilter = DateTime.MinValue 
dateCompletedFilter = DateTime.MinValue 

我怎麼了ñ去忽略結果Linq到Entites查詢中的這些默認值?我已經嘗試了下面的內容,但是由於日期沒有正確過濾,所以會返回比預期更多的結果。

查詢:

var surveys = ctx.Portal_SurveyRecommendations. 
       Where(c => c.CustNum.Equals(insuredNumber)). 
       Where(l => l.LocationKey.ToString().Equals(surveyLocationNumber)). 
       Where(di => di.DateRecIssued.Value > dateIssuedFilter || di.DateRecIssued.Value == null). 
       Where(dc => dc.DateRecComplete.Value > dateCompletedFilter || dc.DateRecComplete.Value == null). 
       OrderBy(o => o.ReportKey).ThenBy(o => o.RecNumKey).ToList(); 

我想我可以打破查詢分成子查詢的,檢查的默認值,但我很感興趣,看看是否可以在一條語句來完成。

回答

0

最好的辦法是把它分解:

var query = ctx.Portal_SurveyRecommendations 
    .Where(c => c.CustNum == insuredNumber); 
if(surveyLocationNumber != -1) 
    query = query.Where(l => l.LocationKey == surveyLocationNumber); 
if(dateIssuedFilter != DateTime.MinValue) 
    query = query.Where(di => di.DateRecIssued == null 
          || di.DateRecIssued.Value > dateIssuedFilter); 
if(dateCompletedFilter != DateTime.MinValue) 
    query = query.Where(dc => dc.DateRecComplete == null 
          || dc.DateRecComplete.Value > dateCompletedFilter); 
var surveys = query.OrderBy(o => o.ReportKey).ThenBy(o => o.RecNumKey).ToList(); 
+0

思想爲多。謝謝馬克。 – 2014-08-28 12:30:06