【发布时间】:2021-11-03 02:10:01
【问题描述】:
我正在尝试创建一个排序功能,可以智能地对我们的刺绣设计计划进行排序。订单有 ID,每个订单可能有 2 或 3 个设计。每个列表条目对应一个设计。同名设计也可能出现在多个订单中,因此设计“Manchester Utd Crest”可能出现在订单 123456 和订单 55555 上
我想先按设计名称(字符串)排序,然后按 OrderId(整数)排序。因此,我希望我所有的设计名称(例如 Manchester Utd Crest)在我们的日程安排中保持一致。但是,如果同一订单上有另一个设计,我希望订单中的第二个设计出现在第一个设计的下方,即使它有不同的名称。
所以我最终会得到这样的结果:
到目前为止,这是我的代码:它仅按 OrderId 排序,然后按设计名称排序。我需要它按设计名称排序,但还要确保相同的 OrderIds 也始终保持在列表中,但它现在不这样做:
embroideryJobs.Sort((EmbroideryJob a, EmbroideryJob b) =>
{
if (a.OrderId != b.OrderId)
return a.OrderId.CompareTo(b.OrderId);
if (a.DesignProcessData[0].Name != b.DesignProcessData[0].Name)
return a.DesignProcessData[0].Name.CompareTo(b.DesignProcessData[0].Name);
return 0;
});
【问题讨论】:
-
你应该提供你已经尝试过的东西。
-
看看``OrderBy`
-
我认为LINQ OrderBy versus ThenBy 可能是您正在寻找的。span>
-
如何选择用于基于名称排序的设计(具有相同订单 ID)?例如。订单 123456 应该在 M 上还是在 N 上订购?这还不清楚。如果不选择特定的设计名称进行订购,您实际上只是按订单 ID 订购。
-
我想先按设计名称(字符串)排序,然后按 OrderId 的(int)。这与你的解释相矛盾。如果是这种情况,同名元素会粘在一起,而不是具有相同订单 ID 的元素。
标签: c#