2016-04-11 31 views
1

我目前正在開發一個實現List(of T)的使用的項目。我正在嘗試對列表進行排序。vb.net基於類屬性的排序列表(T)

的收集是基於PDF_Document

Public Class PDF_Document 
    Public FullFilePath As String 
    Public Property Size As String 
    Public Property DocNumber As String 
    Public Property Sequence As String 
    Public Property Revision As String 
End Class 

當收集被填滿時,它應該排序的序列號集合。 001, 002, 003, 004, ...

但是,如何對基於該屬性的集合進行排序?

+2

爲什麼你存儲這樣一個數字字符串呢?如果您想要用前導零格式化該數字,請在格式化時將其格式化,即f.e.與'sequence.ToString(「D3」)',但不要將它存儲爲字符串。 –

+1

'myList.OrderBy(Function(z)z.Sequence).ToList()'如果不是所有的數字,你可能需要做不同的處理。 – Plutonix

+0

自從我在這裏工作多年以來,這一直是我工作中文檔編號的方式。我知道這很奇怪,但我們的客戶也在大多數時間實施它,所以我想這並不罕見? –

回答

2

爲什麼你一直存儲這樣一個字符串?如果您想要用前導零格式化該數字,請在格式化時將其格式化,即f.e.與sequence.ToString("D3")但不要將其存儲爲字符串。

如果要排序的原始列表,您可以使用List(Of T).Sort

pdfList.Sort(Function(pdf1, pdf2) 
       Return pdf1.Sequence.CompareTo(pdf2.Sequence) 
      End Function) 

如果你不想修改你可以使用LINQ原始列表:

Dim ordered = From pdf In pdfList Order By pdf.Sequence 

您可以創建與ToList,fe:

Dim orderedPdfList = ordered.ToList() 

否則你總是哈ve解析字符串爲Int32

Dim ordered = From pdf In pdfList Order By Int32.Parse(pdf.Sequence)