Linq для дерева выражений EF / Предикат int.Разбор обходного пути
-
19-09-2019 - |
Вопрос
У меня есть объект linq под названием Question , который обладает свойством:строка DateSubmitted.
Я пишу приложение, в котором мне нужно возвращать IQueryable для запроса, который имеет DateSubmitted в определенном диапазоне дат.
В идеале я хотел бы написать что-то вроде
IQueryable<Enquiry> query = Context.EnquirySet.AsQueryable<Enquiry>();
int dateStart = int.Parse("20090729");
int dateEnd = int.Parse("20090930");
query = (from e in query
where(enq => int.Parse(enq.DateSubmitted) < dateEnd)
where(enq => int.Parse(enq.DateSubmitted) > dateStart)
select e);
Очевидно, что Linq для EF не распознает int.Parse , поэтому я думаю, что могу достичь желаемого с помощью метода Expression, который возвращает предикат???
Я поиграл с PredicateBuilder и искал повсюду, но я успешно поджарил свои мозги, пытаясь разобраться в этом.Конечно, я мог бы добавить другое свойство к своей сущности и преобразовать его туда, но мне бы действительно хотелось это понять.Кто-нибудь может объяснить или привести пример / ссылку, которые не поджаривают мне мозги?
Заранее спасибо
Отметка
Решение
Если вы знаете, что ваши строки даты допустимы, и они действительно расположены в этом порядке (что является естественным порядком сортировки), вам может сойти с рук сравнение строк:
IQueryable<Enquiry> query = Context.EnquirySet.AsQueryable<Enquiry>();
string dateStart ="20090729";
string dateEnd = "20090930";
query = (from e in query
where(enq => enq.DateSubmitted.CompareTo(dateEnd)) < 0)
where(enq => enq.DateSubmitted.CompareTo(dateStart)) > 0)
select e);