【问题标题】:How to assign values to IEnumerable<dynamic>如何为 IEnumerable<dynamic> 赋值
【发布时间】:2013-03-07 18:12:59
【问题描述】:

我有以下代码:

var db = Database.Open("Text");
var headers = db.Query("SELECT * FROM Headers");

//headers is now an IEnumerable<dynamic>

string s = headers[0].Text; // Works correctly

headers[0].Text = "Some string";

如果我尝试将“某些字符串”分配给标题的 Text 属性,则会收到以下错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: WebMatrix.Data.DynamicRecord contains no definition for Text.

如何将 headers 对象转换为 List/Array 以便能够为其分配新值?

【问题讨论】:

  • 该值是只读的。您可以 A) 使用 s = "Some string" 或 B) 尝试使用更新查询

标签: c# razor webmatrix


【解决方案1】:

问题在于从 WebMatrix 返回的 DynamicRecord 类实际上是“只读”的。 DynamicObject 不允许设置Text

如果您想更改值,则需要将此数据映射到您自己的类中,而不是将它们保留在原始 dynamic 类型中。

【讨论】:

  • 感谢您的回答,但是有没有一种通用的方法来映射DynamicRecord,这样我就不必为数据库中的每个表编写一个类了?
  • 你可能想看看 Massive - github.com/robconery/massive - 这是一个轻量级的 ORM,它是一种花哨的说法,给我一些我可以操作和获取并放入数据库的对象。
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多