我正在尝试使用我在这里找到的示例代码来处理我正在处理的事情: 如何将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)
但仍然没有好,相同的错误和使用声明仍然是灰色的.
集会
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)
为了解决这个问题,我最终从这里获取了 Dynamic.cs 文件: https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx ?f=255&MSPPError=-2147217396 我将其添加到我的解决方案中并使用它,在这个类中,DynamicExpression 类是公共的,所以我被发现了。
| 归档时间: |
|
| 查看次数: |
8529 次 |
| 最近记录: |