例如: -
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列行
答案 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
,则可能会导致异常。那么你首先需要Parse
到int
。
答案 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” 否则我认为没有默认选项来排序数据表,除了循环