Предположим, что у меня есть метод ниже, где должен быть заполнен номер insuredNumber, но остальные три параметра могут содержать значения по умолчанию, как показано ниже
Подпись метода:
public List<Portal_SurveyRecommendations> LoadSurveyRecommendations(string insuredNumber, string surveyLocationNumber, DateTime dateIssuedFilter, DateTime dateCompletedFilter)
{
}
Значения по умолчанию:
surveyLocationNumber = "-1"
dateIssuedFilter = DateTime.MinValue
dateCompletedFilter = DateTime.MinValue
Как мне теперь игнорировать эти значения по умолчанию в результате запроса 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();
Я полагаю, что я мог бы разбить запрос на запрос sub, проверяя значения по умолчанию, но мне интересно узнать, можно ли это сделать в одном утверждении.
Лучше всего сломать его:
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();