在.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的情况。
我的唯一问题-为什么在看起来不应该的情况下此代码可以正常工作?