如何获得排序后的数据表的前10行?

问题描述:

我想按照与前面的DataTable相同的顺序从DataTable中获得前10行。如何获得排序后的数据表的前10行?

使用下面的代码,我可以将它在dt1中排序并仅将10行导入到dt2中,但它不会按排序顺序导入行。我需要它来保持排序顺序。您的帮助将不胜感激。

DataTable dt2 = dt1.Clone(); 
    dt1.DefaultView.Sort = "x DESC"; 
    for (int i = 0; i < 10; i++) 
    { 
     dt2 .ImportRow(dt1.Rows[i]); 
    } 

只需使用一个查询和排序是这样的:

DataTable dt2 = dt.Clone(); 

//get only the rows you want 
DataRow[] results = dt.Select("", "x DESC"); 

//populate new destination table 
for(var i=0; i < 10; i++)   
    dt2.ImportRow(results[i]); 

希望它能帮助!

+0

它引发此错误语法错误:'10'运算符后缺少操作数。 – Seesharp 2012-03-17 19:23:40

+0

对不起,我使用了不正确的代码。我已经编辑它,看看它现在是否适用于你。 – Reinaldo 2012-03-17 19:27:50

+0

感谢您的编辑,现在它引发了这个语法错误:'DESC'操作符后缺少操作数。 – Seesharp 2012-03-17 19:34:19

你整理的数据,而不是数据本身的视图;因此,当您访问行时,您将再次访问的数据是未排序的数据。

您需要使用Select()从dt1中获得一组有序的行,然后从获取的行。

+0

是的,我是想选择,但我得到的语法错误dt1.Select( “X说明”);.什么是正确的方法来做到这一点? – Seesharp 2012-03-17 19:20:22

+1

(请参阅Reinaldo的答案。) – JTeagle 2012-03-17 19:22:20

void GetSortedTable(int count, string order = "DESC") 
{ 
    // Get our data table sorted by 'x' in a specific 'order'. 
    DataRow[] results = dt.Select("", "x " + order); 

    // Create a new empty data table. 
    DataTable dt2 = dt.Clone(); 

    // Import the resulting 'count' rows into it. 
    for (int i = 0; i < count; ++i) 
     dt2.ImportRow(results[i]); 

    return dt2; 
} 

相关:MSDN - DataTable.Select