从DataItem中读取匿名类型

时间:2009-04-13 00:40:39

标签: linq

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

3 个答案:

答案 0 :(得分:10)

similar question

获得以下内容
DataBinder.Eval(e.Item.DataItem, "PropertyName")

答案 1 :(得分:2)

您可以添加更多信息吗?你真的想要一个字符串值,还是需要一个特定的字符串?

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

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

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

答案 2 :(得分:0)

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

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? )