【发布时间】:2015-11-30 21:51:38
【问题描述】:
我有一个在 EnumerableRowCollection(Of System.Data.DataRow) 中传递的方法,我希望能够使用底层数据表。最终我希望能够使用该数据表的列集合。
目前我使用
Dim t As System.Data.DataTable = TryCast(x(0), DataRow).Table
x is EnumerableRowCollection(Of System.Data.DataRow)
这很好用,除了行数为零的情况。
我确信底层数据表定义仍然存在,因为如果我针对 x '添加观察',我可以通过调试器访问它
在我看到的监视窗口中
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}
我追求的是mydatatable
如果我尝试
x.Table
然后我得到
'table' 不是 'System.Collections.Generic.IEnumerable(Of System.Data.DataRow)'。
在我的例子中,enumerablerowcollection 很可能是使用带有 orderby 的 LINQ 从数据表创建的
Dim z = (From d In mydataset.mydatatable.OrderBy(Function(c) c.myfield))
总之,即使 EnumerableRows 的计数为零,我也希望能够从 EnumerableRowCollection(Of System.Data.DataRow) 访问数据表。 如果这是不可能的,那么请你帮我解释一下监视窗口如何显示这个。我可以添加我在监视窗口中看到的图像吗? 我添加了调试器显示的图像,它如何获取此表信息
【问题讨论】:
-
我这里没有足够的代码来测试想法,但是通过在空集合上调用 AddRow 并为您的列反映新行来“伪造它”怎么样?
-
我明天会用更有用的代码示例来编辑这个。我正在按照你的想法进行一些探索,如果这能让我到任何地方,我会更新
-
不,您无法从零大小的集合中获取有关表的信息。您必须通过另一个参数传递表格。
-
为什么要底层的
DataTable?你能不接受DataTable而不是行集合吗?
标签: .net vb.net linq system.data