需要按有效期对所有托盘进行分组,按有效期升序排序,在每组中按重量对托盘进行分类。
class Pallete
{
public List<Box> boxes { get; private set; }
public DateTime? getExpirationDate() {
return boxes.Min(b => b.ExpirationDate);
}
public int getWeight() {
return boxes.Sum(b => b.Weight) + 30;
}
}
结果是按到期日期对所有托盘进行分组,按到期日期升序排序。现在如何在每组中按重量排序?
private List<Pallete> palletes;
public void getGroupedBy() {
var g = palletes
.GroupBy(p => p.getExpirationDate())
.OrderBy(p => p.Key);
foreach (var x in g)
{
System.Console.WriteLine("ExDate:{0}", x.Key);
foreach (var y in x)
{
System.Console.WriteLine("=====weight:{0}, id:{1}", y.getWeight(), y.Id);
}
}
}
更新 这样做了
public void getGroupedBy() {
var g = palletes
.GroupBy(p => p.getExpirationDate())
.OrderBy(p => p.Key)
.ToDictionary(p => p.Key, p => p.OrderBy(p => p.getWeight()))
.GroupBy(p => p.Key);
foreach (var x in g)
{
System.Console.WriteLine("ExDate:{0}", x.Key);
foreach (var y in x)
{
System.Console.WriteLine("==ExDate:{0}", y.Key);
foreach (var z in y.Value) {
System.Console.WriteLine("=====weight:{0}, id:{1}", z.getWeight(), z.Id);
}
}
}
}
在我看来是歪的。是否有可能以某种方式改进最终的结构?导致IGrouping?
您也在进行后期排序
ToDictionary
,GroupBy
这可能会弄乱元素的顺序。排序操作必须是最后一个才能保证这种排序。例子如果您需要将其包装在一个函数中