Приложение сортирует строки иначе, чем база данных. - PullRequest
2 голосов
/ 10 ноября 2008

Я пытаюсь отсортировать список продуктов по их названию в приложении .Net, написанном на C #, чтобы получить тот же список, который я получил бы из базы данных SQL Server по порядку: выберите * из заказа товаров по ProductName

К сожалению, сортировка приложения ведет себя иначе, чем сортировка базы данных. Вероятно, это связано с сопоставлением: в базе данных имеется сопоставление SQL_Latin1_General_CP1_CI_AS.

Как я могу заставить приложение сортировать эти строки точно так же, как это делает база данных?

Спасибо.


ОБНОВЛЕНИЕ: я наконец-то получил хороший результат, используя код из комментариев ниже и изменив параметры сравнения на Порядковый:

private CompareOptions myOptions = CompareOptions.Ordinal;

Кроме того, эта ссылка содержит очень полезную информацию, связанную с сопоставлениями SQL: http://www.siao2.com/2005/11/08/490305.aspx


Спасибо. Это еще не работает, но это, вероятно, правильное направление. Вот код, который я сейчас пытаюсь:

((Список) orderDetails). Сортировка (новый 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 );
  }
}

Все еще нет результата.

Что ты думаешь? Как мне получить информацию из базы данных, чтобы узнать, какую культуру мне следует использовать?

Спасибо.

1 Ответ

4 голосов
/ 10 ноября 2008

вам, вероятно, понадобится использовать ту культуру, которую вы хотите отсортировать. Посмотрите на пример StringComparer: http://msdn.microsoft.com/en-us/library/system.stringcomparer.currentculture.aspx

...