为什么linq orderby使用匿名类型

时间:2018-09-11 11:18:59

标签: c# linq iqueryable

在.net 4.5.2上的一个项目中,我具有以下LINQ:

var orderVolumes = _ordersRepository.GetAll()
            .Where(o => o.CreationDate >= startMonth)
            .GroupBy(o => new { o.CreationDate.Year, o.CreationDate.Month })
            .OrderBy(or => new { or.Key.Year, or.Key.Month })
            .Select(
                gr =>
                    new TempOrderVolume
                    {
                        Year = gr.Key.Year,
                        Month = gr.Key.Month,
                        NumberOfOrders = gr.Count(),
                        PriceOfOrders = gr.Sum(p => p.Price) ?? 0.0m
                    }).ToList();

GetAll()方法返回IQueryable<Order>Order类具有DateTime CreationDate属性。

我为包含此代码的方法编写了一个单元测试,模拟了存储库,创建了一个List<Order> _orders,在此列表中添加了一些数据,并为GetAll()方法返回_orders.AsQueryable()进行了设置。 测试失败,出现参数异常

  

“至少一个对象必须实现IComparable”

在OrderBy(...)步骤上。 对于编译器不知道如何比较匿名对象{ or.Key.Year, or.Key.Month }

,我并不感到惊讶

但是我不明白为什么它可以在应用程序本身中工作?

请不要建议我如何解决此异常,我知道可以进行OrderBy(...).ThenBy(...)以及使用非匿名类型实现IComparable的情况。

我的唯一问题-为什么在看起来不应该的情况下此代码可以正常工作?

0 个答案:

没有答案