至少有一个对象必须实现IComparable错误

时间:2015-04-15 07:41:13

标签: c# linq

我遇到了问题,我无法解决。看看我的代码。

CustomerProductivity.Add(new ChartDataViewModel
{
    Series = new List<string> { "Sales" },
    ChartType = "bar",
    Data = SalesStatistics
        .GroupBy(b => b.CustomerName)
        .Select(g => new ChartDataElement()
        {
            X = g.Key,
            Y = new List<int>() { (int)g.Sum(b => b.Sales) }
        }).OrderByDescending(f=> f.Y).Take(3).ToList(),
    ChartConfig = config
});

场景是我希望获得销量最高的前三大客户。但它给我一个错误,因为“至少有一个对象必须实现IComparable”。令人惊讶的是,我尝试按客户名称订购并且工作正常,但如果按销售订单则不行。

2 个答案:

答案 0 :(得分:0)

由于@leppie提到您按List订购,而您的程序不知道如何比较这2个列表

List<int> > List<int> // How i compare this? by Count? by elements? what property of elements? and so one

我看到您的列表中只有只有1个元素。基于此,您可以通过列表中的.First()(且仅限)元素进行排序。

CustomerProductivity.Add(new ChartDataViewModel
{
    Series = new List<string> { "Sales" },
    ChartType = "bar",
    Data = SalesStatistics
        .GroupBy(b => b.CustomerName)
        .Select(g => new ChartDataElement()
        {
            X = g.Key,
            Y = new List<int>() { (int)g.Sum(b => b.Sales) }
        }).OrderByDescending(f=> f.Y.First()).Take(3).ToList(),
    ChartConfig = config
});

答案 1 :(得分:0)

我怀疑为什么我们需要一个列表来保存单个值,不应该

<pre>
   Y = new List<int>() { (int)g.Sum(b => b.Sales) }
</pre>
should be 
<pre>
  Y =  (int)g.Sum(b => b.Sales) \\\\ as the sum will a int. 
</pre>

如果我是正确的,那么改变这一行将纠正错误。