Linq Dynamic ParseLambda没有解决

时间:2015-10-16 18:00:34

标签: c# asp.net linq

我试图使用我在这里找到的示例代码来处理我正在做的事情: How to convert a String to its equivalent LINQ Expression Tree?

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

var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);

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

  

System.Linq.Expressions.DynamicExpression'不包含' ParseLambda'

的定义

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

using System.Linq.Dynamic;

然而,这看起来是灰色的,所以我猜不知道我所指的DynamicExpression对象来自那里,它是从系统中提取的。 Linq.Expression而不是。有没有办法来解决这个问题?我已经尝试过了

System.Linq.Dynamic.ParseLambda(new[] { p }, null, tagCondition);

但仍然没有好,相同的错误和using语句仍然是灰色的。

2 个答案:

答案 0 :(得分:8)

程序集

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);
        }
    }
}

答案 1 :(得分:1)

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