【问题标题】:Read Anonymous Type from DataItem从 DataItem 中读取匿名类型
【发布时间】:2010-02-04 04:36:43
【问题描述】:

我想将 e.Item.DataItem 中的值读入一个字符串,但无论出于何种原因,我似乎无法得到它,尽管我可以在监视窗口中看到它

【问题讨论】:

  • 如果我们要了解正在发生的事情,我们需要更多的信息。
  • 这很模糊。请提供上下文。 Web 窗体、Windows 窗体、.NET 版本等

标签: linq


【解决方案1】:

similar question 获得以下信息

DataBinder.Eval(e.Item.DataItem, "PropertyName")

【讨论】:

    【解决方案2】:

    你能补充更多信息吗?您是真的想要一个字符串值还是需要该值中的特定字符串?

    如果您需要一个应该可行的字符串值。监视窗口倾向于通过在对象上调用 .ToString 来显示值。如果监视窗口中的值是您想要的字符串,那么您应该可以通过简单地调用 ToString 来获取它。

    var item = e.Item.DataItem.ToString();
    

    您还需要对各种属性进行空值检查。

    【讨论】:

      【解决方案3】:

      听起来你做了类似的事情:

      obj.Datasource = (from .... select new { a=..., b=...}).ToList();
      

      对于您的一件商品,您想获取“a”或“b”的值,对吗?

      可以,但它很复杂(不推荐)。为此,您必须将 e.Item.DataItem 强制转换为正确的类,但这是一个匿名类型,这意味着您无法在没有一些技巧的情况下指定强制转换。你可以试试这样的:

      private T ForceCast(T prototype, object obj)
      {
        return (T)obj;
      }
      

      然后,调用 ForceCast(new {a=...,b=...}, e.Item.DataItem)。我认为如果你在同一个程序集中这会起作用(并且你为 a 和 b 提供的值得到正确的类型 - 编译器会为你猜测 T 并弄清楚事情)。但是,更好的方法是定义一个真正的类来保存您从数据源返回的数据。然后你可以将 e.Item.DataItem 转换为那个类,你会没事的。

      (注意:我实际上并没有尝试运行此代码——这只是我在阅读本文时的一个想法,但我想我以前见过它。也许是this blog?)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2017-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        相关资源
        最近更新 更多