如何根据索引/行号从DataTable中选择行?

Fur*_*dar 6 c# linq indexing datatable criteria

我有一个DataTable.我想根据行中的Index/ 选择Row NumberDataTable.

假设以下是DataTable:

----------------    ---------------
| ID   | Name  |    | Index/RowNo |
----------------    ---------------
| A001 | John  |    |      1      |
| A002 | Foo   |    |      2      |
| A003 | Rambo |    |      3      |
| A004 | Andy  |    |      4      |
| ...  | ...   |    |      5      |
----------------    ---------------
Run Code Online (Sandbox Code Playgroud)

现在,我想DataTable使用标准来选择上面显示的行,例如Index > 2,在那种情况下,索引1处的第一个条目A001 | John将不会成为结果的一部分DataTable.我怎样才能有效地做到这一点?

此外,我想以结果DataTableLinq查询结果的形式得到我的结果.

我想做这样的事情:

var result = dt.Select("RowNum > 1", "");
Run Code Online (Sandbox Code Playgroud)

要么

var result = from row in dt.AsEnumerable()
             where RowNum > 1
             select row;
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 8

我想做这样的事情:

var result = dt.Select("RowNum > 1", "");
Run Code Online (Sandbox Code Playgroud)

Enumerable.Skip甚至可以使用DataTable它,因为它是IEnumerable<DataRow>:

IEnumerable<DataRow> allButFirst = table.AsEnumerable().Skip(1);
Run Code Online (Sandbox Code Playgroud)

得到一个新DataTable的:

DataTable tblAllButFirst = allButFirst.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

如果您的下一个问题是如何只采用给定索引的行:

var allowedIndices = new[]{ 2, 4, 7, 8, 9, 10 };
DataTable tblAllowedRows = table.AsEnumerable()
                                .Where((r, i) => allowedIndices.Contains(i))
                                .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)


cuo*_*gle 5

var result = table.AsEnumerable()
                  .Where((row, index) => index > 1)
                  .CopyToDataTable()
Run Code Online (Sandbox Code Playgroud)