c# - 为什么 linq orderby 使用匿名类型
问题描述
在 .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()
方法 return _orders.AsQueryable()
。测试失败,参数异常
“至少一个对象必须实现 IComparable”
在 OrderBy(...) 步骤上。编译器不知道如何比较匿名对象我并不感到惊讶{ or.Key.Year, or.Key.Month }
但我不明白为什么它在应用程序本身中起作用?
请不要建议我如何解决此异常,我知道可以做的事情OrderBy(...).ThenBy(...)
以及使用实现 IComparable 的非匿名类型。
我的问题只是-为什么这段代码看起来不应该正常工作?
解决方案
推荐阅读
- java - 如何在 JDBC 中使用 PreparedStatement
- sas - 请让我知道我们如何使用 RTF 输出在 sas 中为 [a] 编写超级脚本?
- ios - Swift 中的 Framework 和 Package 有什么区别?
- javascript - 如何正确检测 React JS 中的重新渲染?
- java - 为什么 NetBeans 中的调色板显示为空白?
- python - 'str' 对象没有属性 'save' Django
- java - 使用递归编写在Java中创建路径的方法
- angular - 使用服务器端渲染角度时出现“未定义窗口”错误
- javascript - 首次从下拉列表中选择项目时,onchange函数不会触发 - Thinbug
- javascript - 想要访问子网格视图中的数据,但它显示“未找到匹配记录”