Ошибка при сортировке таблицы со стороны сервера: «Как минимум один объект должен реализовывать IComparable». - PullRequest
0 голосов
/ 02 марта 2012

У меня есть дата, у которой всего 23 столбца в IEnumerable<AdjustmentErrorCodes> adjustmentErrorFile;

Этот AdjustmentErrorCodes определяется как:

public class AdjustmentErrorCodes
{
    public AdjustmentErrorCodes();

    public string AdjustmentErrorCode { get; set; }
    public string AdjustmentErrorCodesDescription { get; set; }
    public **List<AdjustmentErrorDetails>** AdjustmentErrorDetails { get; set; }
    public int AdjustmentErrorTypesKey { get; set; }
}

Я пытаюсь отсортировать полюбой столбец с сервера.Если это для индекса SortColumn 0 или 1, он работает нормально.Я пытаюсь отсортировать из любых других столбцов, которые из списка, то ошибка выдает при возврате a.AdjustmentErrorDetails.Select (b => b.CaseDisplayId); as
Ошибка: "По крайней мереодин объект должен реализовывать IComparable. "Источник: mscorlib

Кто-нибудь знает, как сортировать из списка в списке.Ценю ваши предложения.Спасибо за ваше время.

Func<AdjustmentErrorCodes, object> orderingFunction = (a =>
                   {
                       if (sortColumnIndex == 0)
                       {
                           return a.AdjustmentErrorCode;
                       }

  else if (sortColumnIndex == 1)
                            return a.AdjustmentErrorCodesDescription;

                       else
return **a.AdjustmentErrorDetails.Select(b => b.CaseDisplayId);**

                   });

1 Ответ

0 голосов
/ 02 марта 2012

Для столбца 0 или 1 вы сортируете по единственному значению . Все в порядке. В противном случае вы сортируете по последовательности . Что это хотя бы значит? Если у одного AdjustmentErrorCode есть последовательность CaseDisplayIds из { 1, 5, 3 }, а у другого - { 2, 4 }, что должно стоять на первом месте?

Обратите внимание, что ваша сортировка определенно происходит в вашем .NET-коде, не в базе данных. Вы действительно этого хотите?

Кроме того, я бы предложил, чтобы вместо проверки sortColumnIndex на каждой итерации вы использовали разные лямбда-выражения:

Func<AdjustmentErrorCodes, object> orderingFunction;
switch (sortColumnIndex)
{
    case 0: orderingFunction = a => a.AdjustmentErrorCode; break;
    case 1: orderingFunction = a => a.AdjustmentErrorCodeDescription; break;
    default: orderingFunction = ...;
}

(Или напишите метод для этого оператора switch, который возвращает значение, и вызовите его с помощью:

var orderingFunction = CreateOrdering(sortColumnIndex);

Таким образом, назначения можно превратить в операторы возврата, и вы можете потерять операторы break;:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...