它针对OData服务运行.
到目前为止,只要我限制条件来构建Equal(..),GreaterThan(..)等选项,所有这些都有效.
似乎没有build / like条件的构建,所以我尝试构建自己的.那里已经有一些文章了.我试过的一个是How to create a System.Linq.Expressions.Expression for Like?.
现在如果我使用上面的解决方案,结果where表达式
whereCallExpression = {Convert([10000]).Expand("A,B").Where(clt => Mylike(clt.Lastname,"te"))}'
这很好,但错了,因为它没有转化为有效的Odata查询.
如果我使用条件’Equal’,结果是
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
关于如何解决这个问题的解决方案?
问候
安德烈亚斯
PS,我在静态类中实现了解决方案扩展,我改变的是从’like’到’Mylike’的被调用方法的名称
此外,由于用于构建表达式的代码适用于任何内置条件,我认为,现在该部分是可以的.如果需要,我可以发布部分内容
支持substringof,当您在filter(Where)表达式中使用string.Contains方法时,客户端liNQ提供程序应该生成它.
要获取C#编译器生成的表达式,您可以执行以下 *** 作:
Iqueryable<string> source = new List<string>().Asqueryable();Iqueryable<string> result = from item in source where item.Contains("John") select item;Console.Writeline(result.Expression.ToString());
基本上任何Iqueryable都有一个属性Expression,它包含要运行的查询的表达式树.一些liNQ提供程序可能会稍微改变表达式树与编译器创建的原始表达式,但大多数应该使它接近原始表达式.
总结以上是内存溢出为你收集整理的c# – 如何创建动态“包含或LIKE”表达式,以便与Linq一起使用OData服务全部内容,希望文章能够帮你解决c# – 如何创建动态“包含或LIKE”表达式,以便与Linq一起使用OData服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)