首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpandoObject的动态链接查询?

ExpandoObject的动态链接查询?
EN

Stack Overflow用户
提问于 2012-10-29 17:54:39
回答 1查看 4.1K关注 0票数 3

有没有办法使用LINQ动态查询库(System.Linq.Dynamic)根据ExpandoObject的属性来评估条件?下面的代码在"var e...“行抛出一个异常,声明”类型ExpandoObject中不存在属性或字段'Weight‘“:-

代码语言:javascript
复制
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语法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 18:34:01

不是直接的。动态LINQ库归结为表达式树,而表达式树不直接支持动态。最有可能的是,动态查询库使用Expression.PropertyOrField来处理.Foo等,而这不适用于dynamic

您也许可以编写一个自定义表达式解析器,如果它发现参数是一个字典,则用大量查找代码替换它;不过,这并不有趣。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13119264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档