0

我有了在IEnumerable<AdjustmentErrorCodes> adjustmentErrorFile;从服务器端对表进行排序时出错:“至少有一个对象必须实现IComparable。”

AdjustmentErrorCodes共有23列被定义为一个数据表:

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; } 
} 

我想排序从Serverside集团任何列。如果它是为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);** 

        }); 

回答

0

对于列0或1,你被一个单个值排序。没关系。否则,您将按序列排序。那有什么意思?如果一个AdjustmentErrorCode具有CaseDisplayIds{ 1, 5, 3 }的序列并且另一个具有{ 2, 4 }的序列,该序列应该优先?

请注意,您的排序肯定发生在您的.NET代码中,数据库中的而不是。那真的是你想要的吗?

此外,我会建议,而不是在每次迭代检查sortColumnIndex,您可以使用不同的lambda表达式:

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

(或写该交换机声明,回报值的方法,并调用它搭配:

var orderingFunction = CreateOrdering(sortColumnIndex); 

这样的分配可以变成return语句,你可以失去break;声明:)

相关问题