我生成一个 DataTable(从非 SQL 数据),然后使用 DataView 来过滤记录。
我想限制最终记录集中的记录数但在生成数据表时无法做到这一点。
我已采取从最终结果集中删除行的方法,如下所示:
DataView dataView = new DataView(dataTable);
dataView.RowFilter = String.Format("EventDate > '{0}'", DateTime.Now);
dataView.Sort = "EventDate";
dataTable = dataView.ToTable();
while (dataTable.Rows.Count > _rowLimit)
dataTable.Rows[dataTable.Rows.Count - 1].Delete();
return dataTable;
有没有更有效的方法来限制结果?
您可以使用 Linq:
尝试将代码更改为以下内容:
DataView dataView = new DataView(dataTable);
dataView.RowFilter = String.Format("EventDate > '{0}'", DateTime.Now);
dataView.Sort = "EventDate";
dataTable = dataView.ToTable();
while (dataTable.Rows.Count > _rowLimit)
{
dataTable = dataTable.AsEnumerable().Skip(0).Take(50).CopyToDataTable();
}
return dataTable;
您需要命名空间:System.Linq 和 System.Data
尝试将前 x 行从一个数据表复制到新数据表中。
DataTable newdataTable = dataTable.AsEnumerable().Take(50).CopyToDataTable();
然后使用它。
您可以添加一个类似于 rowcount 1,2,3 的列吗 当您将非 SQL 数据中的行添加到数据表时,就像递增一样。 大概之后你就可以使用了
DataRow[] rows1 = dTable.Select(" RowIncrement < 50", "EventDate ASC");
RowIncrement 是类似于 ROWNUM 的列