1

我有一个名为 Enquiry 的 linq 实体,它有一个属性:字符串 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 to EF 不能识别 int.Parse,所以我想我可以通过返回谓词的 Expression 方法来实现我想要的???

我一直在玩 PredicateBuilder 并四处寻找,但我已经成功地绞尽脑汁试图解决这个问题。当然我可以向我的实体添加另一个属性并在那里转换它,但我真的很想了解这一点。任何人都可以解释或给出一个不会让我发疯的例子/链接吗?

提前致谢

标记

4

1 回答 1

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);
于 2009-09-30T15:33:04.237 回答