如何解决如何使用Expression.Call使用linq扩展方法
这是我面临的一个简单例子:
Expression<Func<Company,bool>> func = a => a.Name == "foo bar";
var exp = Expression.Call(typeof(IQueryable<Company>),"Where",new[] { typeof(Company) },func);
运行此代码时,我收到以下消息:
No generic method 'Where' on type 'System.Linq.IQueryable`1[BBM.Domain.Entities.Core.Company]' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
我不确定为什么会这样。
解决方法
Where
实际上是类型System.Linq.Queryable
的扩展方法。获得它的最简单方法(由于Queryable
具有2个重载,而这些重载仅在谓词Expression<>
中的泛型参数数量上有所不同),我想说的只是使用另一个表达式:
Expression<Func<IQueryable<int>,IQueryable<int>>> expr = x => x.Where(y => true);
var mi = ((MethodCallExpression)expr.Body).Method;
但是我想说您似乎实际上不需要这样做,因为您可以手动创建Call
表达式:
Expression<Func<Company,bool>> func = a => a.Name == "foo bar";
Expression<Func<IQueryable<Company>,IQueryable<Company>>> call = x => x.Where(func);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。