1

我正在围绕一些执行 sql 语句并返回结果的数据库编写一个包装器。

ExecuteQuery理想情况下,该命令应IEnumerable<T>根据查询结果映射到的对象类型返回一个。问题是我不知道这将是什么类型,因此我宁愿返回一个IEnumerable<dynamic>类型。

到目前为止,这一切都很好,除了我希望动态对象属性与被查询的列相同但无论如何我都找不到分配它,我目前在数组 col[] 中拥有所有列名,例如

dynamic obj = new {} as dynamic;
for(int i = 0; i < col.Length; i++){
    //say col[i] == 'id', I want obj.id = someValue 
    obj.? = someValue;  ???
}

我希望这很清楚。我希望这不是不可能的!

ps 我是为 WP7 写的,所以我的选择非常有限,记住这一点可能会很好。

谢谢你的帮助。

4

1 回答 1

1

dynamic不适用于您的情况。当您在编译时dynamic知道属性名称但不知道该属性将在其上定义的实际类型时使用。

如果您仅在运行时知道属性名称,则必须使用普通反射,如下所示:

obj.GetType()
   .GetProperty(col[i])
   .SetValue(obj, someValue);

请注意,dynamic obj = new {} as dynamic;这完全没有意义。这将创建一个没有任何属性的匿名类型。将它分配给一个dynamic变量并不会改变它没有——也永远不会——任何属性的事实。

如果您尝试向对象动态添加属性,您可能需要使用ExpandoObject.

用法是这样的:

IDictionary<string, object> obj = new ExpandoObject();
for(int i = 0; i < col.Length; i++)
{
    obj.Add(col[i], someValue);
}

return (dynamic)obj;
于 2013-04-30T13:52:51.750 回答