2

C# で記述された .Net アプリケーションで製品のリストを名前で並べ替えて、SQL Server データベースから order by: select * from Products order by ProductName で取得するのと同じリストを取得しようとしています。

残念ながら、アプリケーションの並べ替えは、データベースの並べ替えとは異なる動作をします。おそらく照合に関連しています。データベースには SQL_Latin1_General_CP1_CI_AS 照合があります。

データベースとまったく同じようにアプリケーションでこれらの文字列をソートするにはどうすればよいですか?

ありがとう。


更新:以下のコメントのコードを使用し、比較オプションを序数に変更することで、最終的に良い結果が得られました。

private CompareOptions myOptions = CompareOptions.Ordinal ;

また、このリンクには、SQL 照合に関連する非常に役立つ情報が含まれています: http://www.siao2.com/2005/11/08/490305.aspx


ありがとう。まだ機能していませんが、これはおそらく正しい方向です。これが私が今試しているコードです:

((List)orderDetails).Sort(new OrderDetailComparer());

ここで、OrderDetailComparer は次のとおりです。

public class OrderDetailComparer : IComparer<OrderDetail>
{
  private CompareInfo myComp = CompareInfo.GetCompareInfo("en-US");
  private CompareOptions myOptions = CompareOptions.StringSort;

  public int Compare(OrderDetail a, OrderDetail b)
  {
    if (a == b) return 0;
    if (a == null) return -1;
    if (b == null) return 1;

    return myComp.Compare ( a.Product.ProductNameForSorting, b.Product.ProductNameForSorting, myOptions );
  }
}

まだ結果が出ていません。

どう思いますか?どの文化を使用すべきかを知るために、データベースから情報を取得するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

4

おそらく、並べ替えたいカルチャを使用する必要があります。StringComparer の例を見てください: http://msdn.microsoft.com/en-us/library/system.stringcomparer.currentculture.aspx

于 2008-11-10T17:26:13.153 に答える