2014-08-28 2 views
1

сказать, что я ниже метод, где insuredNumber требуется, чтобы быть заполнены, но остальные три параметра могут содержать значения по умолчанию, как показано нижеLinq к Entities фильтрации параметров по умолчанию

Метод Подпись:

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

Defaults:

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

Как Я, n игнорировать эти значения по умолчанию в результирующем запросе Linq to 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

мысли, как много. Спасибо, Марк. –

Смежные вопросы