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

时间:2012-10-17 09:10:54

标签: c# linq datatable indexing criteria

我有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。我怎样才能有效地做到这一点?

此外,我希望以DataTableLinq查询结果的形式获得我的结果。

我正在尝试做这样的事情:

var result = dt.Select("RowNum > 1", "");

OR

var result = from row in dt.AsEnumerable()
             where RowNum > 1
             select row;

2 个答案:

答案 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()