如何使用c#对datatable中的特定列进行排序

时间:2013-07-01 12:16:19

标签: c#-4.0 sorting datatable

例如: -

var Rows = (from row in dt1.AsEnumerable()
                            orderby row["Amount"] descending
                            select row);

如果是这样的表

              RegId     Name

              101       jone

              102       Raj

              103       guru

       i want output like this using c# DataTable

              RegId     Name

              103       jone

              102       Raj

              101       guru  

我想只排序regid列行

3 个答案:

答案 0 :(得分:1)

所以你想要订购一个列但是按照旧订单保留列的其余部分?奇怪的要求是哪些列彼此不相关?

但是,以下代码将选择所需的列并按顺序对其进行排序。然后,DataTable将使用此列的新值进行更新:

List<int> amountsOrdered = dt1.AsEnumerable()
    .Select(r => r.Field<int>("Amount"))
    .OrderByDescending(i => i)
    .ToList();
for (int i = 0; i < dt1.Rows.Count; i++)
    dt1.Rows[i].SetField("Amount", amountsOrdered[i]);

请注意,Field扩展方法是强类型的,这是一件好事。但如果列的类型为string,则可能会导致异常。那么你首先需要Parseint

答案 1 :(得分:0)

var regIds = dt1.AsEnumerable()
                .Cast<DataRow>()
                .Select(r => (int)r["Amount"])
                .OrderByDescending(id => id)
                .ToArray();

for(int i=0; i < dt1.Rows.Count; i++)
{
    DataRow row = dt1.Rows[i];
    row["Amount"] = regIds[i];
}

确保对数据表的Amount列的唯一性禁用约束(如果有)。 documentation page

中的更多信息

答案 2 :(得分:-1)

如果你可以使用dataview,那么你可以简单地使用dataview.sort =“expression” 否则我认为没有默认选项来排序数据表,除了循环