Linq Dynamic ParseLambda未解析

21 浏览
0 Comments

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语句仍然是灰色的。

0
0 Comments

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。

0
0 Comments

Linq Dynamic ParseLambda not resolving是一个问题,它的出现原因是在使用ParseLambda时无法解析。为了解决这个问题,我从https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx?f=255&MSPPError=-2147217396下载了Dynamic.cs文件,并将其添加到我的解决方案中使用。在这个问题中,DynamicExpression类是公共的,所以它可以被找到和使用。

0