如何基于索引/行号从DataTable中选择行?

7

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

假设以下是DataTable

----------------    ---------------
| ID   | Name  |    | Index/RowNo |
----------------    ---------------
| A001 | John  |    |      1      |
| A002 | Foo   |    |      2      |
| A003 | Rambo |    |      3      |
| A004 | Andy  |    |      4      |
| ...  | ...   |    |      5      |
----------------    ---------------

现在,我想使用条件(例如Index>2)从上述DataTable中选择行,在这种情况下,索引1处的第一个条目A001|John将不成为结果DataTable的一部分。如何高效地做到这一点?
此外,我想以DataTableLinq查询结果两种形式呈现我的结果。
我正在尝试做这样的事情:
var result = dt.Select("RowNum > 1", "");

或者

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

8

I am trying to do something like this:

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
+1 除了跳过第一个项目并返回所有剩余项目之外,还有什么比这更快的呢? - Sergey Berezovskiy

6
var result = table.AsEnumerable()
                  .Where((row, index) => index > 1)
                  .CopyToDataTable()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接