System.Linq.Expression.Compile 错误
System.Linq.Expression.Compile error
我在尝试创建动态 lambda 表达式时遇到问题。参数上的东西。有人经历过吗?
此代码需要创建以下 lambda:
{x => x.Core.Where(core => core.Members.Where(members => members.Name.ToUpper().Contains("LOK")).Any()).Any()}
但是在编译方法中出现错误。
错误信息:
Variable 'core' of type 'TesteLambdaParameter.Models.Class2'
referenced from scope '', but it is not defined
Predicate = {x => x.Core.Where(core => core.Members.Where(members => members.Name.ToUpper().Contains("LOK")).Any()).Any()}
我的代码:
Func<T, bool> compiled = predicate.Compile(); // <<== Error Here
// Error message: Variable 'core' of type 'TesteLambdaParameter.Models.Class2' referenced from scope '', but it is not defined
已解决。
方法被递归调用,创建参数和表达式并返回给自己。在此过程中,参数已从内存中删除,因为它们已经被使用过,相信不会有问题。但是它们需要一直保存在内存中,直到编译的时候。在这种情况下,我使用了一个私有变量来存储已经使用的参数,因此编译正确。
我在尝试创建动态 lambda 表达式时遇到问题。参数上的东西。有人经历过吗?
此代码需要创建以下 lambda:
{x => x.Core.Where(core => core.Members.Where(members => members.Name.ToUpper().Contains("LOK")).Any()).Any()}
但是在编译方法中出现错误。
错误信息:
Variable 'core' of type 'TesteLambdaParameter.Models.Class2' referenced from scope '', but it is not defined
Predicate = {x => x.Core.Where(core => core.Members.Where(members => members.Name.ToUpper().Contains("LOK")).Any()).Any()}
我的代码:
Func<T, bool> compiled = predicate.Compile(); // <<== Error Here
// Error message: Variable 'core' of type 'TesteLambdaParameter.Models.Class2' referenced from scope '', but it is not defined
已解决。
方法被递归调用,创建参数和表达式并返回给自己。在此过程中,参数已从内存中删除,因为它们已经被使用过,相信不会有问题。但是它们需要一直保存在内存中,直到编译的时候。在这种情况下,我使用了一个私有变量来存储已经使用的参数,因此编译正确。