Linq到EF Expression Tree / Predicate int.Parse变通方法

时间:2009-09-30 15:25:47

标签: linq linq-to-entities expression-trees predicate

我有一个名为Inquiry的linq实体,它有一个属性:string DateSubmitted。

我正在编写一个应用程序,我需要返回IQueryable for Inquiry,在特定日期范围内有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 to EF不识别int.Parse,所以我想我可以通过返回谓词的Expression方法实现我想要的东西???

我一直在玩PredicateBuilder并且一直在寻找,但我已经成功地绞尽脑汁想要解决这个问题。当然,我可以添加另一个属性到我的实体并转换它,但我真的很想理解这一点。任何人都可以解释或给出一个不会炒我的大脑的例子/链接吗?

提前致谢

马克

1 个答案:

答案 0 :(得分: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);