如何通过查找字典重新排序DataRow []的行?

时间:2012-08-30 20:08:50

标签: c# c#-3.0

//集合“fields”包含一组带有“FieldId”列

的行
DataRow[] fields = GetFields();

//此字典包含一组键值对。 keys表示FieldId,值表示OrderId的

Dictionary<string, int> orders = new Dictionary<string, int>();
orders = LoadOrders();

我需要按照字典中OrderId的顺序重新排序“fields”集合。字典应该用作交叉引用来查找FieldId并获取OrderId。

Sample data in fields:

Books
Movies
Electronics

Sample data in orders:

<Books, 2>
<Movies, 3>
<Electronics, 1>

The output by reordering the "fields" should be :

Electronics
Books
Movies

如果有人对此有任何想法,请您分享一下吗?谢谢。

3 个答案:

答案 0 :(得分:1)

LINQ救援!

var results = fields.OrderBy(field => orders[field["FieldID"]]);

答案 1 :(得分:1)

这应该有效:

var res = fields.OrderBy(x => orders[x.Field<string>("FieldId")]).ToArray();

或者,如果您更喜欢就地排序:

Array.Sort(fields,
          (a,b) => orders[a.Field<string>("FieldId")]
                   .CompareTo(orders[b.Field<string>("FieldId")]));

当然,您需要确保orders字典包含fields集合中的所有值。

答案 2 :(得分:0)

var result = (from entry in myDict 
              orderby entry.Value ascending 
              select entry)
              .ToDictionary(pair => pair.Key, pair => pair.Value);