从 EnumerableRowCollection(Of System.Data.DataRow) 中,将 table 分配给一个变量
from an EnumerableRowCollection(Of System.Data.DataRow), assign the table to a variable
我有一个在 EnumerableRowCollection(Of System.Data.DataRow) 中传递的方法,我希望能够使用基础数据table。最终我希望能够使用该数据的列集合table。
目前我在用
Dim t As System.Data.DataTable = TryCast(x(0), DataRow).Table
其中 x is EnumerableRowCollection(Of System.Data.DataRow
)
除了行数为零的情况外,这工作正常。
我确信底层数据table定义仍然存在,因为如果我'add watch'反对x
,我可以通过调试器访问它
在手表里window我看到了
x|{System.Data.EnumerableRowCollection(of System.Data.DataRow)}
System.Data.EnumerableRowCollection(of System.Data.DataRow)|{System.Data.EnumerableRowCollection(of System.Data.DataRow)}
ElementType| {Name="DataRow" FullName = "System.Data.DataRow"}
EnumerableRows|In-Memory Query
Table|{mydatatable}
我要找的是我的数据table
如果我尝试
x.Table
然后我得到
'table' is not a member of 'System.Collections.Generic.IEnumerable(Of
System.Data.DataRow)'.
在我的例子中,enumerablerowcollection 很可能是使用 LINQ 和 orderby
从数据table 创建的
Dim z = (From d In mydataset.mydatatable.OrderBy(Function(c) c.myfield))
总而言之,即使 EnumerableRows 的计数为零,我也希望能够从 EnumerableRowCollection(Of System.Data.DataRow) 访问数据table。
如果这不可能,请您帮我解释一下手表 window 是如何显示的。我可以添加我在手表中看到的图像 window 吗?
我已经添加了调试器显示的图像,它是如何获得这个 table 信息的
没有 public 属性 或公开底层 DataTable
的方法。您在 internal
属性 中看到的 Table
属性 public 无法访问。您可以使用反射深入研究这个实现细节:
var pi = rows.GetType().GetProperty("Table",BindingFlags.NonPublic | BindingFlags.Instance);
DataTable dt = pi.GetValue(rows) as DataTable;
但是(希望很明显)这些内部实现细节很脆弱并且可能会发生变化。
由于 class 本身 is not intended to be used directly from your class,我强烈建议更改您的方法以将 DataTable
作为参数而不是这个特定于实现的 class。
我有一个在 EnumerableRowCollection(Of System.Data.DataRow) 中传递的方法,我希望能够使用基础数据table。最终我希望能够使用该数据的列集合table。
目前我在用
Dim t As System.Data.DataTable = TryCast(x(0), DataRow).Table
其中 x is EnumerableRowCollection(Of System.Data.DataRow
)
除了行数为零的情况外,这工作正常。
我确信底层数据table定义仍然存在,因为如果我'add watch'反对x
,我可以通过调试器访问它在手表里window我看到了
x|{System.Data.EnumerableRowCollection(of System.Data.DataRow)}
System.Data.EnumerableRowCollection(of System.Data.DataRow)|{System.Data.EnumerableRowCollection(of System.Data.DataRow)}
ElementType| {Name="DataRow" FullName = "System.Data.DataRow"}
EnumerableRows|In-Memory Query
Table|{mydatatable}
我要找的是我的数据table
如果我尝试
x.Table
然后我得到
'table' is not a member of 'System.Collections.Generic.IEnumerable(Of System.Data.DataRow)'.
在我的例子中,enumerablerowcollection 很可能是使用 LINQ 和 orderby
从数据table 创建的 Dim z = (From d In mydataset.mydatatable.OrderBy(Function(c) c.myfield))
总而言之,即使 EnumerableRows 的计数为零,我也希望能够从 EnumerableRowCollection(Of System.Data.DataRow) 访问数据table。
如果这不可能,请您帮我解释一下手表 window 是如何显示的。我可以添加我在手表中看到的图像 window 吗?
我已经添加了调试器显示的图像,它是如何获得这个 table 信息的
没有 public 属性 或公开底层 DataTable
的方法。您在 internal
属性 中看到的 Table
属性 public 无法访问。您可以使用反射深入研究这个实现细节:
var pi = rows.GetType().GetProperty("Table",BindingFlags.NonPublic | BindingFlags.Instance);
DataTable dt = pi.GetValue(rows) as DataTable;
但是(希望很明显)这些内部实现细节很脆弱并且可能会发生变化。
由于 class 本身 is not intended to be used directly from your class,我强烈建议更改您的方法以将 DataTable
作为参数而不是这个特定于实现的 class。