Я пытаюсь перефакторизовать запрос 1 к синтаксису запроса 2 ... из-за более читаемых и т. Д. Параметров, таких как "group, begindate, enddate и excludeManifestatie, передаются через аргумент (метод parms). Я проверяю,пусто или нет) прошло или нет, так что я могу построить свой динамический Linq SQL.
Но я получаю ошибку в Query 1, когда я использую .... Проверка HasValue. Она говорит: "Невозможно неявно преобразовать тип'System.Linq.IQueryable' to 'bool' "
Query 2 работает нормально, и это то, что я хочу, но у него сложный синтаксис, поэтому мне нужно исправить синтаксис Query 1.
ЗАПРОС 1:
((String.IsNullOrEmpty(group)) ? (a.id != -1) : (a.no_group == group))
&& ((group.Equals("990") || (group == string.Empty)) ? (!a.displaylocal.HasValue || a.displaylocal.Value == false) : (a.id != -1))
&& ((a.begindate.HasValue ? DateTime.Now >= a.begindate.Value : a.id != -1) &&
(a.enddate.HasValue ? DateTime.Now <= a.enddate.Value : a.id != -1))
&& ((String.IsNullOrEmpty(excludeManifestatie)) ? (a.id != -1) : (a.type_manifestation != excludeManifestatie))
НОВЫЙ / ЛУЧШИЙ СПОСОБ НАПИСАТЬ:
ЗАПРОС 2:
var query = dc.agenda.AsQueryable();
if (!string.IsNullOrEmpty(group))
query = query.Where(a => a.no_group == group);
if (group.Equals("990") || group.Equals(string.Empty))
if ((query.Where(a => a.displaylocal.HasValue))) //Gives ERROR
query = query.Where(a => a.displaylocal >= DateTime.Now);
if (!string.IsNullOrEmpty(excludeManifestatie))
query = query.Where(a => a.type_manifestation != excludeManifestatie);
if (query.Where(a => a.begindate.HasValue)) //Gives ERROR
query = query.Where(a => a.begindate <= DateTime.Now);
if ((query.Where(a => a.enddate.HasValue))) //Gives ERROR
query = query.Where(a => a.enddate >= DateTime.Now);