3

LINQ 動的クエリ ライブラリ (System.Linq.Dynamic) を使用して、ExpandoObject のプロパティに基づいて条件を評価する方法はありますか? 次のコードは、" var e..." 行で例外をスローし、「プロパティまたはフィールド 'Weight' が ExpandoObject 型に存在しません」と伝えます:-

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 構文を使用することをお勧めします。

4

1 に答える 1