c# – 如何在运行时为LINQ和Entity Framework生成链式方法表达式
发布时间:2020-12-16 01:59:20 所属栏目:百科 来源:网络整理
导读:我正在工作一个小型库,在运行时生成’where’表达式.我已经能够使用不同的运算符(如Expression.Equal,Expression.NotEqual,甚至是字符串上的.Contains()方法)来导航对象属性和查询. 我遇到了一种情况,我需要创建一个表示链式方法的表达式,如下所示:x = x.So
我正在工作一个小型库,在运行时生成’where’表达式.我已经能够使用不同的运算符(如Expression.Equal,Expression.NotEqual,甚至是字符串上的.Contains()方法)来导航对象属性和查询.
我遇到了一种情况,我需要创建一个表示链式方法的表达式,如下所示:x => x.SomeColumn.Trim()的endsWith( “SomeText” 则会).我不知道从哪里开始. 我已经像这样实现了.EndsWith()方法: static Expression<Func<TEntity,bool>> GetEndsWithExpression( ParameterExpression parameterExpression,Expression propertyExpression,Expression valueToFind) { var propertyExp = propertyExpression; var method = typeof(string).GetMethod("EndsWith",new[] { typeof(string) }); var someValue = valueToFind; var containsMethodExp = Expression.Call(propertyExp,method,someValue); return Expression.Lambda<Func<TEntity,bool>>(containsMethodExp,parameterExpression); } 我想知道你是否可以帮我弄清楚如何添加.Trim()方法并用.EndsWith()方法链接它. 其他一些信息,我已经在我的项目中使用LINQKit了,所以像.AsExpandable()这样的东西对我来说有些熟悉. 我的初始(错误)方法(更新) 我认为解决方案看起来像这样: static Expression<Func<TEntity,bool>> GetTrimEndsWithExpression( ParameterExpression parameterExpression,Expression valueToFind) { var propertyExp = propertyExpression; var trimMethod = typeof(string).GetMethod("Trim"); var endsWithMethod = typeof(string).GetMethod("EndsWith",new[] { typeof(string) }); var trimMethodExpression = Expression.Call(propertyExp,trimMethod).Expand(); var containsMethodExp = Expression.Call(trimMethodExpression,endsWithMethod,valueToFind); return Expression.Lambda<Func<TEntity,parameterExpression); } 但是,这无法编译.它抛出一个错误: System.Reflection.AmbiguousMatchException: Ambiguous match found. 如何在运行时生成的表达式中链接这两个方法? 解决方法
此行抛出了“模糊匹配发现”异常:
var trimMethod = typeof(string).GetMethod("Trim"); 将其更改为: var trimMethod = typeof(string).GetMethod("Trim",new Type[0]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Paperclip – 用于nil的未定义方法`match
- cocos2d-x平台审核中遇到的openssl问题解决方案
- 玩转 React(七)- 组件之间的数据共享
- 如何优化SQLite ORDER BY rowid?
- 如何在Json.NET中将缺少的属性反序列化为默认值?
- swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS
- 详解Vue2.x-directive的学习笔记
- VS2005运行项目报错“试图运行项目时出错:未能加载文件或程
- Swift defer 函数完全退出时执行(常用于销毁数据)
- [7]Cocos2d-x之碰撞区域发生偏移