Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq到EF表达式树/谓词int.解析解决方法_Linq_Linq To Entities_Expression Trees_Predicate - Fatal编程技术网

Linq到EF表达式树/谓词int.解析解决方法

Linq到EF表达式树/谓词int.解析解决方法,linq,linq-to-entities,expression-trees,predicate,Linq,Linq To Entities,Expression Trees,Predicate,我有一个名为inquiry的linq实体,它有一个属性:string DateSubmitted 我正在编写一个应用程序,其中我需要返回IQueryable,以便查询在特定日期范围内提交的日期 理想情况下,我想写一些 IQueryable<Enquiry> query = Context.EnquirySet.AsQueryable<Enquiry>(); int dateStart = int.Parse("20090729"); int dateEnd = int.P

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

我正在编写一个应用程序,其中我需要返回IQueryable,以便查询在特定日期范围内提交的日期

理想情况下,我想写一些

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);
IQueryable query=Context.inquiryset.AsQueryable();
int dateStart=int.Parse(“20090729”);
int dateEnd=int.Parse(“20090930”);
query=(来自query中的e)
其中(enq=>int.Parse(enq.DateSubmitted)int.Parse(enq.DateSubmitted)>dateStart)
选择e);
显然Linq to EF不能识别int.Parse,所以我想我可以通过一个返回谓词的表达式方法来实现我想要的

我一直在玩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);
IQueryable query=Context.inquiryset.AsQueryable();
字符串dateStart=“20090729”;
字符串dateEnd=“20090930”;
query=(来自query中的e)
其中(enq=>enq.DateSubmitted.CompareTo(dateEnd))<0)
其中(enq=>enq.DateSubmitted.CompareTo(dateStart))>0)
选择e);

这是一个很好的解决方法,谢谢,我可能会使用它,谢谢!!!就我所知,有没有一种方法可以与谓词进行这种比较?我慢慢地开始思考这个问题:-)好吧,你是从一个谓词开始的。我不确定我是否真的理解这个问题…Jon我想我在寻找一种更通用的方法,在需要进行类型转换时能够比较值。我遇到过这样的情况,实体属性以枚举的形式公开,字符串需要与int进行比较。我认为通过查看PredicateBuilder,我可能能够编写一组通用的方法,例如,将输入类型转换为所需类型,进行小于或大于的比较。请原谅我缺乏知识,我了解Linq的基本知识,但我正试图了解扩展方法、表达式树和谓词。