我有一个名为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并且一直在寻找,但我已经成功地绞尽脑汁想要解决这个问题。当然,我可以添加另一个属性到我的实体并转换它,但我真的很想理解这一点。任何人都可以解释或给出一个不会炒我的大脑的例子/链接吗?
提前致谢
马克
答案 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);