我有DataTable
。我想根据Index
中行的Row Number
/ DataTable
选择行。
假设下面是DataTable
:
---------------- ---------------
| ID | Name | | Index/RowNo |
---------------- ---------------
| A001 | John | | 1 |
| A002 | Foo | | 2 |
| A003 | Rambo | | 3 |
| A004 | Andy | | 4 |
| ... | ... | | 5 |
---------------- ---------------
现在,我想使用标准DataTable
选择上面显示的行Index > 2
,在这种情况下,索引1的第一个条目A001 | John
将不会成为结果DataTable
。我怎样才能有效地做到这一点?
此外,我希望以DataTable
和Linq
查询结果的形式获得我的结果。
我正在尝试做这样的事情:
var result = dt.Select("RowNum > 1", "");
OR
var result = from row in dt.AsEnumerable()
where RowNum > 1
select row;
答案 0 :(得分:7)
我正在尝试做这样的事情:
var result = dt.Select("RowNum > 1", "");
即使DataTable
,您也可以使用Enumerable.Skip
,因为它是IEnumerable<DataRow>
:
IEnumerable<DataRow> allButFirst = table.AsEnumerable().Skip(1);
使用以下内容获取新的DataTable
DataTable tblAllButFirst = allButFirst.CopyToDataTable();
如果您的下一个问题是如何只采用给定索引的行:
var allowedIndices = new[]{ 2, 4, 7, 8, 9, 10 };
DataTable tblAllowedRows = table.AsEnumerable()
.Where((r, i) => allowedIndices.Contains(i))
.CopyToDataTable();
答案 1 :(得分:4)
var result = table.AsEnumerable()
.Where((row, index) => index > 1)
.CopyToDataTable()