我尝试使用 System.Linq.Expressions.Expression (WPF/c#4.0) 创建动态查询工具
它针对 OData 服务运行。
到目前为止,只要我限制构建 Equal(..)、GreaterThan(..) 等选项的条件,一切都正常。
似乎没有构建包含/类似条件,所以我尝试构建自己的。已经有一些文章了。我尝试过的一种是如何为 Like 创建 System.Linq.Expressions.Expression? https://stackoverflow.com/questions/956743/howto-create-a-system-linq-expressions-expression-for-like.
现在,如果我使用上面的解决方案,结果 where 表达式是
whereCallExpression = {Convert([10000]).Expand("A,B").Where(clt => MyLike(clt.LastName, "te"))}'
这很好,但错误,因为它不会转换为有效的 Odata 查询。
如果我使用条件“等于”,结果是
whereCallExpression = {Convert([10000]).Expand("A,B").Where(clt => (clt.LastName == "te"))}
这会导致 OData 查询
results = {http://.../Clients()?$filter=LastName eq 'te'&$expand=A,B}
并且正在按预期工作。
我在解决方案的实施中是否做错了什么,或者它不能与 OData 一起使用?
它应该转移到类似的东西...?$filter=substringof('te', LastName ) eq true
关于如何解决这个问题有什么解决方案吗?
Regards
Andreas
PS,我在静态类中实现了解决方案扩展,我所做的只是将被调用方法的名称从“Like”更改为“MyLike”
另外,由于用于构建表达式的代码适用于任何内置条件,因此我认为目前该部分是可以的。如果需要的话我可以发布部分内容