Linq 从DataItem读取匿名类型

Linq 从DataItem读取匿名类型,linq,Linq,我想将e.Item.DataItem中的值读入一个字符串,但无论出于何种原因,我似乎无法获取该值,尽管我可以在“监视”窗口中看到它是否可以添加更多信息?您确实想要一个字符串值,还是需要该值中的特定字符串 如果您需要一个应该是可行的字符串值。监视窗口倾向于通过调用对象上的.ToString来显示值。如果watch窗口中的值是您想要的字符串,那么您应该可以通过调用ToString来获得它 var item = e.Item.DataItem.ToString(); 您还需要对各种属性执行空检查 听

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

是否可以添加更多信息?您确实想要一个字符串值,还是需要该值中的特定字符串

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

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

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

听起来你做了如下事情:

obj.Datasource = (from .... select new { a=..., b=...}).ToList();
对于你的一个项目,你想得到'a'或'b'的值,对吗

你可以,但这很复杂,不推荐。要做到这一点,您必须将e.Item.DataItem强制转换为正确的类,但这是一个匿名类型,这意味着您无法通过一些技巧指定强制转换。您可以尝试以下方法:

private T ForceCast(T prototype, object obj)
{
  return (T)obj;
}
然后,调用ForceCastnew{a=…,b=…},e.Item.DataItem。我认为,如果您在同一个程序集中,并且为a和b提供的值的类型正确,那么这将起作用-编译器将为您猜测T并解决问题。但是,更好的方法是只定义一个真实的类来保存从数据源返回的数据。然后,您可以将e.Item.DataItem强制转换到该类,这样您就没事了

注意:我实际上还没有试过运行这段代码——这只是我在读这篇文章时的一个想法,但我想我以前见过它。也许是吧?

从一个


如果我们想了解发生了什么,我们需要更多的信息。这是非常模糊的。请提供上下文。Web窗体、Windows窗体、.NET版本等。
DataBinder.Eval(e.Item.DataItem, "PropertyName")