我将动态对象的属性名称指定为字符串形式的整数。 int值表示我正在使用的数据库中的int ID。但是我仍然坚持如何检索分配给属性的值,如下所示:
dynamic test = new ExpandoObject()
IDictionary<string, object> proxyFiler = test as IDictionary<string, object>;
proxyFiler["four"] = 4;
proxyFiler["5"] = 5;
int r = test.four; // Works
int s = test.5; // Doesn't work
读取数据库的方法将返回&#34; int&#34;我希望能够使用该属性名称访问属性值。
要对此进行扩展:如果我想根据属性名称执行linq查询来排序动态对象列表,该怎么办?在这种情况下,我需要获取我已检索的propertyName作为字符串,例如&#34; 15&#34;:
return disorderedList.OrderBy(o => o.propertyName).ToList();
有没有人知道这个问题的简单解决方案,还是您推荐不同的方法?感谢。
答案 0 :(得分:4)
为了dynamic
以这种方式工作,密钥必须遵循C#中有效标识符名称的规则(规则在此outdated MSDN page中指定,但也在C#语言规范中指定)。单个数字(5
)不是允许的标识符名称,这就是为什么它不起作用。
请注意, 仍然可以使用类型作为字典来检索值,其方式与填充方式类似。
至于你的第二个例子 - 你永远不会使用value
,所以它没有效果。这和写int r = test.four;
编辑:
我相信,根据你的方法,你需要输入字典:
return disorderedList
.OrderBy(o => ((IDictionary<string, object>)o)[propertyName]).ToList();