Vb.net 对(类的)列表中的字符串属性进行排序

Vb.net 对(类的)列表中的字符串属性进行排序,vb.net,Vb.net,在我的数据库项目中,用户应该具有搜索功能。 搜索结果保存在一个列表中(属于Class\u Post)。此列表现在应按字母顺序排序。 我想补充一点,我本可以使用: sorted.Sort(函数(x,y)x.compareto(y)) 但是FxCopAnalyzer抱怨排序可能因区域设置而不同,因此我现在想使用String.Compare(x,y,StringComparison.Ordinal) 要排序的属性是Class_Post.Ueberschrift。错误出现在第11行(sorted.sor

在我的数据库项目中,用户应该具有搜索功能。 搜索结果保存在一个
列表中(属于Class\u Post)
。此列表现在应按字母顺序排序。 我想补充一点,我本可以使用:
sorted.Sort(函数(x,y)x.compareto(y))
但是FxCopAnalyzer抱怨排序可能因区域设置而不同,因此我现在想使用
String.Compare(x,y,StringComparison.Ordinal)

要排序的属性是Class_Post.Ueberschrift。错误出现在第11行(sorted.sort(comparison)):重载解析失败,因为无法使用以下参数调用可访问的“sort”: “Public重载子排序(comparer作为IComparer(属于类\ Post)):“Option Strict On”不允许从“comparation(属于字符串)”隐式转换为“IComparer(属于类\ Post)”


你不需要比较(字符串)而是比较(类文章),你需要比较
Ueberschrift

Case Sortiermoeglichkeiten.Alphabetisch ' alphabetical (a String)
        Dim comparison As Comparison(Of Class_Post) =
                Function(x, y)
                    Dim rslt As Integer = StringComparer.Ordinal.Compare(x.Ueberschrift, y.Ueberschrift)
                    Return rslt
                End Function
        sorted.Sort(comparison)
ListOf(Class\u Post)
可以通过
比较(Class\u Post)
进行排序

另一种更易于阅读和维护的方法是LINQ:

Select Case Suchmoeglichkeit
    Case Sortiermoeglichkeiten.Alphabetisch ' alphabetical (a String)
        Return Ergebnisse.OrderBy(Function(x) x.Ueberschrift).ToList()
    Case Sortiermoeglichkeiten.Erstellzeit 'Creation Time (a Date)
        Return Ergebnisse.OrderBy(Function(x) x.Erstelldatum_dieses_Posts).ToList()
    Case Else
        Exit Select
End Select

我不认为这两个选项在所有情况下都是可互换的。第一个选项对现有列表进行就地排序,而LINQ选项创建一个新列表,这意味着对原始列表的任何现有引用仍将看到未排序的数据。在很多情况下,这并不重要,但重要的是要理解,以防你遇到一个确实重要的场景。@jmcilhinney;但是OP正在创建一个新的
列表(属于Class_Post)
在该方法的开头,无论如何,
Ergebnisse
是原始查询或集合。所以在这种情况下,它是可互换的。此外,在大多数其他情况下,你是否得到一个新的集合或保持不变并不重要。但我同意,这是不同的。
Select Case Suchmoeglichkeit
    Case Sortiermoeglichkeiten.Alphabetisch ' alphabetical (a String)
        Return Ergebnisse.OrderBy(Function(x) x.Ueberschrift).ToList()
    Case Sortiermoeglichkeiten.Erstellzeit 'Creation Time (a Date)
        Return Ergebnisse.OrderBy(Function(x) x.Erstelldatum_dieses_Posts).ToList()
    Case Else
        Exit Select
End Select