我有一个包含动态行数和动态列数的DataTable,
col1 col2 col3 col4............colN
________________________________________________________________________
row1col1 row1col2 row1col3 row1col4........row1colN
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
rowNcol1 rowNcol2 rowNcol3 rowNcol4.......rowNcolN
如何从DataTable的前n列中选择数据?
答案 0 :(得分:1)
获取列:
var tbl = new System.Data.DataTable();
var cols = tbl.Columns.Cast<System.Data.DataColumn>().Take(20);
//如果你想获得前20列......
如果你想获取数据,那么你必须遍历列来获取数据。
var data = cols.SelectMany(x =&gt; tbl.Rows.Cast()。Take(100).Select(y =&gt; y [x]));
当然,如果你想使用强类型对象或一维数组列表,这会把所有数据转储成一个数据,相信它很简单,例如:
var data2 = cols.Select(x =&gt; tbl.Rows.Cast()。Take(100).Select(y =&gt; y [x])。ToArray());
如果您希望保留当前表并保留列数/行数,则可以删除其余列/行:
var tbl = new System.Data.DataTable(); int totalColumnsToReserve = 20; for (int i = tbl.Columns.Count - 1; i >= totalColumnsToReserve; i--) { tbl.Columns.RemoveAt(i); } int totalRowsToReserve = 100; for (int i = tbl.Rows.Count - 1; i >= totalRowsToReserve; i--) { tbl.Rows.RemoveAt(i); }
答案 1 :(得分:1)
您可以使用以下函数从DataTable获取前n列;
其中objSource
是源DataTable,outputCols
首先需要n列。
如果outputCols
是&lt; = 0或&gt; =源DataTable中的总列数,那么它只会返回所有列。
private DataTable GetNColumnsFromDataTable(DataTable objSource, int outputCols)
{
DataTable objOutput = objSource.Copy();
if (outputCols > 0 && outputCols < objSource.Columns.Count)
{
while (outputCols < objOutput.Columns.Count)
{
objOutput.Columns.RemoveAt(objOutput.Columns.Count - 1);
}
}
return objOutput;
}
答案 2 :(得分:0)
遍历行,每行迭代n列。但是,我不确定你想如何处理结果。
其中n是第一列数的示例:
var data = dataTable.AsEnumerable();
const int n = 5;
foreach (var row in data)
{
for (int i = 0; i < n; i++)
{
var value = row[i];
}
}
答案 3 :(得分:0)
首先使用select()获取DataRows数组,然后像数组一样访问每一行
DataTable DT = new DT();
DataRow[] rows = DT.Select();
foreach(DataRow row in rows)
{
for(int i =0; i<n; i++
{
rows[i]; //do whatever you want with this
}
}