Linq для дерева выражений EF / Предикат int.Разбор обходного пути

StackOverflow https://stackoverflow.com/questions/1498870

Вопрос

У меня есть объект 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top