vb.net Linq에서 값으로 목록을 정렬하려고하지만 값이 null이면 다른 값을 사용해야합니다.Vb.net Linq order by special
샘플 : 이런 종류의와
Class Item
Public _Id As Integer
Public _FullName As String
Public _Acronym As String
Public Sub New(ByVal id As Integer, ByVal fullName As String, ByVal acronym As String)
Me._Id = id
Me._FullName = fullName
Me._Acronym = acronym
End Sub
End Class
Sub Main()
Dim itemList As New List(Of Item)
itemList.Add(New Item(1, "AZZ", "A"))
itemList.Add(New Item(2, "BBB", "B"))
itemList.Add(New Item(3, "FFF", "F"))
itemList.Add(New Item(4, "An item", Nothing))
itemList = (From l In itemList Order By l._Acronym).ToList
For Each i In itemList
Debug.Print(String.Format("{0}{2}{1}", i._Acronym, i._FullName, IIf(i._Acronym IsNot Nothing, " - ", "")))
Next
End Sub
결과 :
An item
A - AZZ
B - BBB
F - FFF
결과 내가 원하는 :
A - AZZ
An item
B - BBB
F - FFF
"에" "A"다음에해야하기 때문에.
약어는 약어를 사용해야하지만, 약어가없는 경우 Fullname을 사용해야합니다. 결과에 FullName 값을 두어 사용할 수 없습니다. 그것은 정렬 방법으로 할 수 있지만 결과 목록은 머리 글자 어의 원래 값을 유지해야합니다.
Public ReadOnly Property Sorter As String
Get
If _Acronym Is Nothing Then Return _FullName Else Return _Acronym
End Get
End Property
그런 다음 당신이 당신 LINQ를 변경 해당 속성보다는 _Acronym에 따라 정렬 : 뭔가의 라인을 따라 - 클래스에 추가 속성을 추가하는 방법에 대한 어떤
보다 다른 또는 더 나은 방법이 VB.NET의
IF
기능을 사용할 수 있습니다 = (ItemList By In String.Format ("{0} {2} {1}", l._Acronym, l._FullName, IIf (I. Isron은 아무것도 아님, "-", ""))). ToList – forX