Linq Dynamic ParseLambda未解析
Linq Dynamic ParseLambda未解析
我正在尝试使用我在这里找到的示例代码来完成我的工作:如何将字符串转换为相应的LINQ表达式树?
在解决方案中,作者使用了以下代码:
var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
然而,无论我尝试如何使用它,都无法解决。我得到了一个错误:
System.Linq.Expressions.DynamicExpression' does not contain a definition for 'ParseLambda'
我在项目中安装了System Linq Dynamic nuget包,并且还添加了以下using语句:
using System.Linq.Dynamic;
然而,这个using语句是灰色的,所以我猜它没有认出我引用的DynamicExpression对象来自于这里,而是从System.Linq.Expression中引用的。有没有办法解决这个问题?我尝试了将其改为:
System.Linq.Dynamic.ParseLambda(new[] { p }, null, tagCondition);
但是仍然不行,仍然出现相同的错误,并且using语句仍然是灰色的。
Linq Dynamic ParseLambda无法解析的问题出现的原因是因为两个程序集System.Linq.Dynamic和System.Linq.Expressions都包含DynamicExpression。由于需要同时使用这两个程序集,所以需要给System.Linq.Dynamic指定一个别名,或者明确使用System.Linq.Dynamic.DynamicExpression。
解决方法是确保使用包管理器安装了System.Linq.Dynamic。以下是一个完整的最小工作示例:
using System.Linq.Expressions; using myAlias = System.Linq.Dynamic; namespace ConsoleApplication11 { public class Foo { public string Bar { get; set; } } class Program { static void Main(string[] args) { var expression = @"(Foo.Bar == ""barbar"")"; var p = Expression.Parameter(typeof(Foo), "Foo"); var e = myAlias.DynamicExpression.ParseLambda(new[] { p }, null, expression); var test1 = new Foo() { Bar = "notbarbar", }; var test2 = new Foo() { Bar = "barbar" }; // false var result1 = e.Compile().DynamicInvoke(test1); // true var result2 = e.Compile().DynamicInvoke(test2); } } }
如果像这样使用别名using myAlias = System.Linq.Dynamic.DynamicExpression;会出现错误'System.Linq.Dynamic.DynamicExpression' is inaccessible due to its protection level。
使用别名using myAlias = System.Linq.Dynamic;并在代码中使用myAlias.DynamicExpression.ParseLambda(new[] { p }, null, exp);会得到相同的错误:Error 1 'System.Linq.Dynamic.DynamicExpression' is inaccessible due to its protection level。
Linq Dynamic ParseLambda not resolving是一个问题,它的出现原因是在使用ParseLambda时无法解析。为了解决这个问题,我从https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx?f=255&MSPPError=-2147217396下载了Dynamic.cs文件,并将其添加到我的解决方案中使用。在这个问题中,DynamicExpression类是公共的,所以它可以被找到和使用。