使用它的参数对对象列表进行排序

时间:2013-07-05 04:38:17

标签: .net linq

我正在尝试按特定顺序对对象列表进行排序。

Dim myList as new List(Of myObj)

myObj有2个参数Name(字符串)和ParentName(字符串)

假设myList有n个项目,它们按以下顺序排列:

myList(0): Name="MD" , ParentName = ""  
myList(1): Name="Operations Manager" , ParentName = "MD"  
myList(2): Name="Section Sub Manager" , ParentName = "Section Manager"  
myList(3): Name="Assistant Manager1" , ParentName = "Tactical Manager"  
myList(4): Name="Tactical Manager" , ParentName = "MD"  
myList(5): Name="Assistant Manager2" , ParentName = "Tactical Manager"  
myList(6): Name="Section Manager" , ParentName = "MD"  

我必须对上面的内容进行排序,以便子节点出现在它的父节点之后,即:

myList(0): Name="MD" , ParentName = ""  
myList(1): Name="Operations Manager" , ParentName = "MD"  
myList(2): Name="Section Manager" , ParentName = "MD"  
myList(3): Name="Section Sub Manager" , ParentName = "Section Manager" 
myList(4): Name="Tactical Manager" , ParentName = "MD"  
myList(5): Name="Assistant Manager1" , ParentName = "Tactical Manager"  
myList(6): Name="Assistant Manager2" , ParentName = "Tactical Manager"  

请帮忙。

1 个答案:

答案 0 :(得分:0)

好吧那么,这似乎是一个简单的自定义排序,其中排序约束不会形成总排序(只有部分排序)。这应该可以解决问题:

var sorted = myList.OrderBy(x => x, new CustomComparer()).ToList();

class CustomComparer : IComparer<myObj>
{
    public int Compare(myObj a, myObj b)
    {
        return a.ParentName == b.Name ? 1 : a.Name == b.ParentName ? -1 : 0;
    }
}

(当然,你需要确保没有孩子是他们自己的祖父母才能正常工作。)