2009-09-30 2 views
1

У меня есть linq Entity, называемый запросом, который имеет свойство: string DateSubmitted.Linq to EF Дерево выражений/Предикат int.Parse обходной путь

Я пишу приложение, где мне нужно вернуть 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 и смотрел на все, но я успешно обжарил свои мозги, пытаясь это исправить. Конечно, я мог бы добавить другое свойство в свой Entity и преобразовать его туда, но я действительно хотел бы это понять. Может ли кто-нибудь объяснить или дать пример/ссылку, которая не жарит мои мозги?

Заранее спасибо

Марк

ответ

3

Если вы знаете, что ваши даты строки являются действительными, и они на самом деле в таком порядке (что естественный порядок сортировки), вы можете быть в состоянии уйти со строкой сравнений:

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); 
+0

Это замечательное решение, спасибо, я, вероятно, воспользуюсь этим, спасибо !!! Для моего знания, хотя есть способ сделать такое сравнение с предикатом? Я медленно обдумываю это :-) – Mark

+0

Ну, вы делали это с предикатом для начала. Я не уверен, что я действительно понимаю вопрос ... –

+0

Jon Я думаю, что я искал более общий способ сравнения значений, когда требуется преобразование типа. У меня есть ситуации, когда свойства Entity отображаются в виде Enums, а строки должны сравниваться с int. Я думал, глядя на PredicateBuilder, я мог бы написать общий набор методов, которые могли бы, например, сделать меньше или больше, чем сравнение, преобразуя типы ввода в требуемый тип. Прошу прощения за недостаток знаний, я понимаю основы Основы Linq, но я пытаюсь использовать методы расширения, Expresison trees и Predicates. – Mark

Смежные вопросы