如何在c#中按两列对DataTable进行排序

Meh*_*nce 19 c# asp.net sorting datatable

我有一个DataTable看起来像下面;

|              ID                    | ItemIndex |   ItemValue
ce895bd9-9a92-44bd-8d79-986f991154a9     1            3
ae7d714e-a457-41a8-8bb4-b5a0471c3d2f     2            2
a774dff3-acc0-4f50-a211-a775e28dcae3     2            1
292bbd50-290b-4511-9e4e-2e74e3ebe273     3            2
ae7d714e-a457-41a8-8bb3-b5a0471c3d22     3            1
Run Code Online (Sandbox Code Playgroud)

我想首先对此表进行排序ItemIndex,然后按排序对表进行排序ItemValue.

我怎样才能做到这一点?

编辑:排序后,我想要我的表如下;

|              ID                    | ItemIndex |   ItemValue
ce895bd9-9a92-44bd-8d79-986f991154a9     1            3
a774dff3-acc0-4f50-a211-a775e28dcae3     2            1
ae7d714e-a457-41a8-8bb4-b5a0471c3d2f     2            2
ae7d714e-a457-41a8-8bb3-b5a0471c3d22     3            1
292bbd50-290b-4511-9e4e-2e74e3ebe273     3            2
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 33

您可以使用LINQ to DataSet/DataTable

var newDataTable = yourtable.AsEnumerable()
                   .OrderBy(r=> r.Field<int>("ItemIndex"))
                   .ThenBy(r=> r.Field<int>("ItemValue"))  
                   .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

  • @DOK,是的,但结果可以分配回原始数据表。 (2认同)

Geo*_*ton 28

创建DataView并使用Sort属性:

DataView dv = new DataView(dt);
dv.Sort = "ItemIndex, ItemValue";
Run Code Online (Sandbox Code Playgroud)

例如

foreach (DataRowView row in dv) {
   Console.WriteLine(" {0} \t {1}", row["ItemIndex"], row["ItemValue"]);
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看MDSN以获取更完整的示例:

http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx


小智 20

在datatable对象上,只需获取defaultview对象并设置排序.

dataTable.DefaultView.Sort = "ItemIndex, ItemValue";
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清:您仍然需要调用dataTable.DefaultView.ToTable()以便实际执行排序并将(已排序的)行复制到新的DataTable中,或者可以迭代dataTable.DefaultView。但是,您不能简单地应用.Sort属性,然后迭代原始dataTable的行并期望它们按排序顺序进行。 (2认同)

小智 10

通过创建数据视图

var dataView = new DataView(dataTable);
dataView.Sort = "ItemIndex ASC, ItemValue ASC"
Run Code Online (Sandbox Code Playgroud)

这里dataTable是您要排序的表