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 );
}
}
まだ結果が出ていません。
どう思いますか?どの文化を使用すべきかを知るために、データベースから情報を取得するにはどうすればよいですか?
ありがとう。