2016-04-25 9 views
0

ich ein benutzerdefiniertes Objekt, das die folgenden Eigenschaften in seiner Klasse hat ...Sortierung Dateipfade in einer Liste der benutzerdefinierten Objekte

public class MyFile 
{ 
    private string m_Name; 
    public string Name 
    { 
     get { return m_Name; } 
     set { m_Name= value; } 
    } 

    private string m_Path; 
    public string Path 
    { 
     get { return m_Path; } 
     set { m_Path= value; } 
    } 
} 

ich eine Liste dieser Objekte habe, die wie folgt ...

aussehen
listItems[0].Name = "test1"; listItems[0].Path = "Root/SubDir1/SubDir2"; 
listItems[1].Name = "test30"; listItems[1].Path = "Root"; 
listItems[2].Name = "t14"; listItems[2].Path = "Root/SubDir20/SubDir16"; 

ich sie möchte, um sortiert werden (ähnlich wie würden sie in einer Baumansicht Auflistung Verzeichnispfade angezeigt werden), zum Beispiel ...

test30 (Root) 
test1 (Root/test30) 
test5 (Root/test30) 
test44 (Root) 
SubDir (Root/test44) 
SubDir6 (Root/test44/SubDir) 
test1 (Root/test44/SubDir/SubDir6) 
zSubDir1 (Root) 
SubDir2 (Root/zSubDir1) 
test8 (Root/zSubDir1/SubDir2) 
test9 (Root/zSubDir1/SubDir2) 
test10 (Root/zSubDir1/SubDir2) 

Was ist der beste Weg, dies zu erreichen? Könnte ich etwas wie List<MyFile> sortedList = folders.OrderBy(p => p.Path).ToList(); tun?

Antwort

1

Ja, Sie haben Recht, Sie können einfach linq verwenden, um diese Objektgruppe zu sortieren.

var x1 = new MyFile{ Name = "test30", Path = "Root" }; 
var x2 = new MyFile{ Name = "test1", Path = "Root/test30" }; 
var x3 = new MyFile{ Name = "test5", Path = "Root/test30" }; 
var x4 = new MyFile{ Name = "test44", Path = "Root" }; 
var x5 = new MyFile{ Name = "SubDir", Path = "Root/test44/SubDir" }; 
var x6 = new MyFile{ Name = "SubDir6", Path = "Root/test44/SubDir/SubDir6" }; 
var x7 = new MyFile{ Name = "test1", Path = "Root" }; 
var x8 = new MyFile{ Name = "SubDir2", Path = "Root/zSubDir1" }; 

var lst = new List<MyFile>{ 
    x1,x2,x3,x4,x5,x6,x7, 
}; 
var listItems = lst.OrderBy(x => x.Path).ThenBy(x => x.Name); 

foreach(var item in listItems) 
{ 
    Console.WriteLine("{0} ({1})", item.Name, item.Path); 
} 

Ausgang:

test1 (Root) 
test30 (Root) 
test44 (Root) 
test1 (Root/test30) 
test5 (Root/test30) 
SubDir (Root/test44/SubDir) 
SubDir6 (Root/test44/SubDir/SubDir6) 
+0

Das ist, was mir fehlte! Das ThenBy() war perfekt. Danke Seany84 –