【问题标题】:Linq Dynamic ParseLambda not resolvingLinq 动态 ParseLambda 无法解析
【发布时间】:2016-01-15 13:55:03
【问题描述】:

我正在尝试将我在此处找到的示例代码用于我正在处理的事情: 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 对象,而是从 System.Linq.Expression 获取它。有没有办法来解决这个问题?我试过了

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

但还是不行,同样的错误,using语句仍然是灰色的。

【问题讨论】:

  • System.Linq.Dynamic.DynamicExpression.ParseLambda(...)?
  • @PieterWitvoet 使用我得到一个错误“System.Linq.Dynamic.DynamicExpression”由于其保护级别而无法访问

标签: c# asp.net linq


【解决方案1】:

程序集

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

【讨论】:

  • 如果我使用 myAlias = System.Linq.Dynamic.DynamicExpression;我收到一个错误“System.Linq.Dynamic.DynamicExpression”由于其保护级别而无法访问
  • 使用 myAlias = System.Linq.Dynamic;
  • 并像这样使用它:myAlias.DynamicExpression.ParseLambda(new[] { p }, null, exp);
  • 同样的错误:错误 1 ​​'System.Linq.Dynamic.DynamicExpression' 由于其保护级别而无法访问
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多