Linq to Entities отфильтровывает параметры по умолчанию

1

Предположим, что у меня есть метод ниже, где должен быть заполнен номер 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, проверяя значения по умолчанию, но мне интересно узнать, можно ли это сделать в одном утверждении.

Теги:
linq
linq-to-entities
.net-4.5

1 ответ

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
    Мысли столько же. Спасибо Марк.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню