2

現在、IComparable インターフェイス (ASP.NET 3.5、VB) を実装するオブジェクトがあります。いくつかのインスタンス化されたオブジェクトを Generics リストに配置するときは、単純なsomeList.Sort. 私のCompareTo()機能はこれです:

Public Function CompareTo(ByVal obj As Object) As Integer Implements 
System.IComparable.CompareTo
    'default is number of votes (opposite direction, highest first)'
    Dim sent As Sentence = CType(obj, Sentence)
    Return Not Points.CompareTo(sent.Points)
End Function

これは正常に機能しますが、Point のサブセットとして DateSubmitted プロパティという別のプロパティで並べ替える必要がある場合を除きます。たとえば、3 つのセンテンスに投票がある場合: 3、1、1 の場合、(明らかに) 最も投票数の多いセンテンスを最初に表示し、1 票の 2 つのセンテンスのうち、最初に送信されたセンテンスをリストに表示します。

これは CompareTo() で可能ですか、それともデータベースに再度アクセスしてソートする必要がありますか?

ありがとう

4

2 に答える 2

2

.NET 3.5 を使用しているため、OrderBy拡張メソッドを使用して簡単に並べ替えることができます。

Dim someSortedList = someList.OrderBy(Function(item) item.SomeColumn) _
                             .ThenBy(Function(item) item.SomeOtherColumn)
                             .ToList()

' OrderByDescending and ThenByDescending are also there for descending order

データベースに再度アクセスする必要があるかどうかは、最初にどのようにデータを取得したかによって異なります。大規模なデータ セットがあり、DB からその小さなサブセットのみを取得した場合は、いいえ、新しい並べ替え順序に基づいてデータの小さなサブセットを取得するよう DB に依頼する必要があります。それ以外の場合、既にすべてがメモリにある場合は、上で述べたように並べ替えてください。

于 2009-06-22T23:20:01.810 に答える