具体细节:
我正在使用字典:
Dictionary<int, Tuple<int, Node>>;
为了简化,我们假设Node包含一个int值。
由此,我想按元组的Item1按升序对其进行排序,然后按Node对象中包含的值对关系进行排序(即值相同),这样两者中的值和节点值是排序后的第一个。
var sumList = from pair in openList
orderby pair.Value.Item1 ascending
select pair;
我完成了第一部分。我该如何更改,以便我也可以应用第二部分?
示例:
Node nod1 = new Node(1);
Node nod2 = new Node(2);
Node nod3 = new Node(3);
Node nod4 = new Node(4);
Dictionary.Add(3, nod1);
Dictionary.Add(3, nod4);
Dictionary.Add(2, nod2);
Dictionary.Add(2, nod3);
//result after sort
nod2
nod3
nod1
nod4
答案 0 :(得分:1)
您可以使用ThenBy
...
var sumLists = openList
.OrderBy(pair => pair.Value.Item1)
.ThenBy(pair => pair.Value.Item2.NodeProperty);
答案 1 :(得分:-1)
我认为这会更容易通过表达式来实现,因为IQueryable<KeyValuePair<int, Node>>
允许你执行这样的操作:
openList.OrderBy(c => c.Value.Item1)
.ThenBy(c => c.Value.Item2.NodeValuePropToSortOn)
但是如果你需要使用查询语法,你可以这样做:
var sumList = from pair in openList
orderby pair.Value.Item1 ascending, pair.Value.Item2.NodeValuePropToSortOn ascending
select pair;
多个orderby
属性被链接到OrderBy
,ThenBy
。