Включать только в условие «где», если дата не является низкой (01/01/0001) - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть запрос, в котором есть условие где проверить и найти адреса, которые были добавлены после определенной даты. Поле даты не является обязательным, поэтому я хочу, чтобы поле «Дата» в тех случаях, когда условие учитывалось, только если оно не 01.01.10001. dtmDate - это параметр, который передается

Запрос

from b in _context.customer
           join d in _context.Address on b.id equals d.Id 
           join e in _context.units on d.Id equals e.Id
           where (req.dtmDate.Year != 1 && d.DateAdded >= req.dtmDate)

select new modelAddress
              {
               address= d.address
              }

Но это не работает. Не возвращает никаких строк

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Я бы использовал тот факт, что LINQ-запросы не выполняются при их написании, поэтому вы можете условно добавлять предложения после создания базового запроса:

var query = from b in _context.customer
       join d in _context.Address on b.id equals d.Id 
       join e in _context.units on d.Id equals e.Id;

if(req.dtmDate.Year != 1)
  query = query.Where(d.DateAdded >= req.dtmDate);

var result = query.Select(
  new modelAddress
  {
    address= d.address
  }
);

Я предпочитаю это, потому что я 'Ранее мы сталкивались с проблемами, особенно с запросами EF LINQ, когда предложение Where содержит в коде что-то, что оценивается как истинное локально с помощью кода, а не как что-то, что БД будет оценивать. Кажется, лучше работать, когда «подстановочные знаки» для запросов к БД, использовать шаблон «если x истинно, то добавить-другое-где-предложение», вместо того, чтобы говорить «где (локальное-значение-х-равное-локальное-константа ИЛИ some-db-data-value-equals-y) "

1 голос
/ 07 ноября 2019

Если я вас правильно понимаю, у вас есть объект DateTime с именем req.dtmDate, для которого может быть установлено значение по умолчанию, и вы хотите вернуть все элементы, у которых поле DateAdded элемента больше req.dtmDate,если req.dtmDate не равно 1/1/0001, в этом случае должны быть возвращены все записи.

Если это так, я думаю, вы можете просто изменить существующий код на:

where (req.dtmDate.Year == 1 || d.DateAdded >= req.dtmDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...