有没有办法使用 LINQ 动态查询库 (System.Linq.Dynamic) 根据 ExpandoObject 的属性评估条件?以下代码在“”行引发异常var e...
,表示“ExpandoObject 类型中不存在属性或字段'Weight'”:-
const string TestCondition = "MyStateBag.Foo >= 50 && MyStateBag.Bar >= 100";
dynamic myStateBag = new ExpandoObject();
myStateBag.Foo = 70;
myStateBag.Bar = 100;
var p = Expression.Parameter(typeof(ExpandoObject), "MyStateBag");
var e = DynamicExpression.ParseLambda(new[] { p }, null, TestCondition);
var result = e.Compile().DynamicInvoke(myStateBag);
Assert.IsTrue(result);
另一种方法是将“statebag”实现为字典,但这会导致条件字符串稍微冗长,例如MyStateBag["Foo"] >= 50 && MyStateBag["Bar"] >= 100
. 由于这将用作用户脚本环境的基础,如果可以实现,我更喜欢更简单的 ExpandoObject 语法。