c# - 按一个属性拆分列表并对升序嵌套列表进行排序按属性
问题描述
我有一个简单的课程:
class SimpleDevice
{
public string IMEI {get;set;}
public long Timestamp {get;set;}
}
以及一种为测试目的生成列表的方法:
private static List<SimpleDevice> GenerateListOfDevices()
{
return new List<SimpleDevice>()
{
new SimpleDevice { IMEI = "bbbbb", Timestamp = 33 },
new SimpleDevice { IMEI = "bbbbb", Timestamp = 45 },
new SimpleDevice { IMEI = "aaaaa", Timestamp = 36 },
new SimpleDevice { IMEI = "aaaaa", Timestamp = 37 },
new SimpleDevice { IMEI = "aaaaa", Timestamp = 35 },
new SimpleDevice { IMEI = "bbbbb", Timestamp = 34 },
new SimpleDevice { IMEI = "aaaaa", Timestamp = 39 },
new SimpleDevice { IMEI = "aaaaa", Timestamp = 38 },
new SimpleDevice { IMEI = "bbbbb", Timestamp = 35 }
};
}
我想将嵌套列表拆分List<SimpleDevice>
为List<List<SimpleDevice>>
按IMEI
.
然后,我想按它们对内部列表进行排序Timestamp
,因此每个列表都有一个顺序输出。
这是我的LINQ
声明:
private static List<List<SimpleDevice>> SplitAndSort (List<SimpleDevice> devices)
{
return devices
.Select(x => x)
.GroupBy(x => x.IMEI)
.Select(x => x.Select(y => y).ToList())
.OrderBy(x => x.Select(y => y.Timestamp))
.ToList();
}
这引发了以下异常:
最里面的异常 System.ArgumentException :至少一个对象必须实现 IComparable
这是发生在OrderBy(x => x.Select(y => y.Timestamp))
.
我有一个谷歌,发现该类型OrderedBy
必须实现IComparable
,该类型long
执行以下操作:
public struct Int64 : IComparable, IComparable<Int64>, ...
将内部更改为x => x.Select(...
myOrderBy
以x => x.Min(...
允许我编译和运行我的代码,但内部列表不是由它们排序的Timestamp
,尽管拆分有效:
IMEI: bbbbb, Timestamp: 33
IMEI: bbbbb, Timestamp: 45
IMEI: bbbbb, Timestamp: 34
IMEI: bbbbb, Timestamp: 35
IMEI: aaaaa, Timestamp: 36
IMEI: aaaaa, Timestamp: 37
IMEI: aaaaa, Timestamp: 35
IMEI: aaaaa, Timestamp: 39
IMEI: aaaaa, Timestamp: 38
尝试按升序对内部列表进行排序时,是否有明显的遗漏?
解决方案
您的查询有点混乱。你把OrderBy
它放在错误的地方 - 它适用于外部列表而不是内部。因此,例外。
在您选择(生成)嵌套列表时进行排序:
private static List<List<SimpleDevice>> SplitAndSort(List<SimpleDevice> devices)
{
return devices
.GroupBy(x => x.IMEI)
.Select(g => g.Select(y => y).OrderBy(x => x.Timestamp).ToList())
.ToList();
}
请注意,您取出.Select(y=>y)
,OrderBy
就足够了。(我没有在上面删除)
推荐阅读
- cmake - Doxygen 文档
- sql - 计算数据透视表中两个时间戳之间的分钟数
- mips - 为什么使用 `addi $reg, $0, N` 而不是 `li $reg N`?
- javascript - 选择不属于返回接口类型的属性时出现 TypeScript 编译错误
- jenkins - 从 Jenkins 在远程服务器上运行 curl 命令
- powerbi - PowerBI - 查询中的重复条目
- python - Django - 使用外键对象创建模型对象
- javascript - 单击html按钮后无法回显任何内容
- excel - 将 xlsx 转换为 xlsb
- html - 我需要在哪里应用 line-height 才能生效?