Linq Dynamic ParseLambda没有解决

Par*_*osh 8 c# linq asp.net

我正在尝试使用我在这里找到的示例代码来处理我正在处理的事情: 如何将String转换为其等效的LINQ表达式树?

在解决方案中,作者使用以下内容:

var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试使用它时,它都无法解决.我收到一个错误:

System.Linq.Expressions.DynamicExpression'不包含'ParseLambda'的定义

我在项目中安装了System Linq Dynamic nuget包,我还添加了一个using语句:

using System.Linq.Dynamic;
Run Code Online (Sandbox Code Playgroud)

然而,这看起来是灰色的所以我猜它没有发现我所指的DynamicExpression对象来自那里,而是从System.Linq.Expression中取而代之.有没有办法来解决这个问题?我试过去做

System.Linq.Dynamic.ParseLambda(new[] { p }, null, tagCondition);
Run Code Online (Sandbox Code Playgroud)

但仍然没有好,相同的错误和使用声明仍然是灰色的.

Lei*_*son 9

集会

System.Linq.Dynamic;
System.Linq.Expressions;
Run Code Online (Sandbox Code Playgroud)

都含有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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 相同的错误:错误 1 ​​'System.Linq.Dynamic.DynamicExpression' 由于其保护级别而无法访问 (2认同)

Par*_*osh 2

为了解决这个问题,我最终从这里获取了 Dynamic.cs 文件: https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx ?f=255&MSPPError=-2147217396 我将其添加到我的解决方案中并使用它,在这个类中,DynamicExpression 类是公共的,所以我被发现了。