LINQ atm 遇到问题。我目前有一个可以有两个名称的类 - MeterName 和 ChannelName;两个字符串。但是,ChannelName 属性可能为空或 null。此类称为 ChannelRecord,其中包含与 Meter + Channel 名称相关的一些其他属性。
这些存储在一个列表中,该列表映射到字典中的日期时间。这意味着我们有这个:
Dictionary<DateTime, List<ChannelRecord>> outputMap = ....;
我正在尝试根据其仪表和通道名称对通道记录进行排序,仪表以数字和符号开头,z 排在最后。
到目前为止,我的代码如下所示:
var orderedMap = outputMap.Select(x => x.Value) // as in KeyValuePair<TKey,TValue>
.OrderBy(list => list.Select(record => record.MeterName))
.ThenBy(list => list.Select(record => record.ChannelName));
但是,我得到一个例外,即“其中一个对象必须实现 IComparable”。这很有趣,因为 AFAIK,字符串实现了 IComparable。我知道 KeyValuePair 没有,但我正在.Select()
从中获取价值。
做什么?