根据列中的值对数据表进行排序

本文关键字:数据表 排序 | 更新日期: 2023-09-27 18:17:38

我有一个数据表

PId     PName   Qty
123     XYZ     2
223     ABC     4
434     PQR    33      

我想按"PName"排序,但不是按c/desc顺序排序,如果我将PName传递为"PQR",那么PQR应该首先出现,然后是其余行,同样的,如果我传递"ABC",那么"ABC"应该首先出现,然后是其他行。基本上想要重新洗牌的行,第一行应该是"PName",我保存在一个变量。

感谢

所期望的输出如果我有"ABC",那么上面的数据表应该重新洗牌为,

PId     PName   Qty
223     ABC     4
123     XYZ     2
434     PQR    33

如果我有"PQR",那么上面的数据表应该重新洗牌为,

PId     PName   Qty
434     PQR    33   
123     XYZ     2
223     ABC     4

根据列中的值对数据表进行排序

    DataTable dt = new DataTable();
    dt.Columns.Add("PId", typeof(Int32));
    dt.Columns.Add("PName", typeof(string));
    dt.Columns.Add("Qty", typeof(Int32));
    dt.Rows.Add(123, "XYZ", 2);
    dt.Rows.Add(223, "ABC", 4);
    dt.Rows.Add(434, "PQR", 33);
    var stkLists = dt.AsEnumerable().ToList();
    var matchList = stkLists.Where(m => m["PName"].ToString().StartsWith("PQR")).ToList();
    var FinalList = matchList.Concat(stkLists.Except(matchList).ToList());

试试:

DataTable dt = new DataTable();
dt.Columns.Add("PId", typeof(Int32));
dt.Columns.Add("PName", typeof(string));
dt.Columns.Add("Qty", typeof(Int32));
dt.Rows.Add(123, "XYZ", 2);
dt.Rows.Add(223, "ABC", 4);
dt.Rows.Add(434, "PQR", 33);

string Name = "PQR";
DataTable newDt = dt.Rows.Cast<DataRow>().Where(r => r.ItemArray[1] == Name).CopyToDataTable();
dt = dt.Rows.Cast<DataRow>().Where(r => r.ItemArray[1] != Name).CopyToDataTable();
newDt.Merge(dt);