0

我有一个清单

key ParentKey
1   Null
2   1
3   Null
4   Null
5   1
6   4
7   6
8   3

我想把它分类

key ParentKey
1   Null
2   1
5   1
3   Null
8   3
4   Null
6   4
7   6

通过 linq 如何做到这一点?任何帮助都是最好的

4

3 回答 3

1

假设结果应该是:

key ParentKey
1   Null
2   1
5   1
3   Null
8   3
4   Null
6   4
7   6

我可以说,如果没有逻辑可以将该位置的空值放入列表中,那么您将无能为力。

因此,使用 Linq,您可以使用OrderBy()函数对列表进行排序:

list = list.OrderBy(x => x.ParentKey).ToList();

但是使用这个函数,结果如下:

key ParentKey
1   Null
3   Null
4   Null
2   1
5   1
8   3
6   4
7   6
于 2012-06-10T08:49:11.610 回答
1

如果你有一份清单

public class MyObject{
      int Key {get;set;}
      int ? ParentKey{get;set;}
}

然后对该列表进行排序,请使用:

 var list = new List<MyObject>(){ new MyObject{ Key = 1 , ParentKey = null } , new MyObject{Key=2 , PatentKey = 1}  /* and so on */};

  var sortedList = list.OrderBy(o=>o.ParentKey , new MyComparer());



public class MyComparer : IComparer<MyObject>
{     
    public int Compare(MyObject o1, MyObject o2)
    {
        if (ol.HasValue && o2.HasValue)
        {
            if (ol.ParentKey.Value == o2.ParentKey.Value)
                 return 0;
            return ol.ParentKey.Value  > o2.ParentKey.Value  ? 1 : -1;
        }
        else
            return 0;

    }
}

这将产生准确的预期序列

于 2012-06-10T08:58:40.757 回答
0

我相信你想要在这里实现的是树的DFS有序打印。
Linq 无法帮助您(至少开箱即用)。

我建议使 DFS 实现适应您的数据结构。请参阅Eric Lippert 的建议

于 2012-06-10T08:56:56.413 回答