我试图使用我在这里找到的示例代码来处理我正在做的事情: 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语句仍然是灰色的。
答案 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类是公开的,所以我被发现了。