Я бы использовал тот факт, что 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) "