如何按位置对项目进行分组并总结其数量?

时间:2013-01-15 17:56:44

标签: c#

下面显示的所有内容都是纯伪代码,用于说明我的问题。

我的代码具有以下数据结构:

// Used to define the ORDERS a customer has placed
List<Orders> myOrders;
Orders
{
  String name
  double quantity
  String location   // there are only 2 possible locations
}

// Used to define the ITEMS we have available
Item
{
  String name
  List<Parts> parts
}

// Used to define the PARTS to make an ITEM
Parts
{
  String name
  double quantity
}

一般细分似乎很清楚,但客户要求是我遇到问题的地方,我不知道如何最好地解决问题...(注意 - 我知道使用NAME而不是ID是不好的关联 - 但这是遗留系统。)

我需要生成的内容如下: - 每个LOCATION所需的所有PARTS列表(仅两个可能的)和订单定义的实际数量 - 在要打印的屏幕上显示 !很明显,您可以在同一位置对同一部件进行多次订购,并且应将它们加在一起以获得总数。

所以我需要做的是: - 接受每个订单并找到该项目 - 拿走每件物品并找到零件 - 为每个零件定义其位置(从订单)并乘以数量(从订单),这是该位置的零件数量

最终结果应该是这样的(表格网格表头)

    Item    Part    QuantityLocation1   QuantityLocation2
    itm1      A         1                    0
              B         4                    2
    itm2      C         0                    5

问题很明显,PART类没有像LOCATION这样的概念......

有人有什么建议吗? 我现在看到的唯一解决方案似乎很糟糕...创建一个新类(如PartswithLocation),添加位置,然后使用此PartsWithLocation重新创建所有ITEM对象(已经存在),然后我可以做一些魔术按订单排序以查找零件并基于位置并乘以数量。最终的结果是一个新的List,然后我可以在网格或其他东西(WPF)中显示......但是这个听起来很难看......

这纯粹是与设计相关的问题,我不是在寻找源代码,只是关于如何更好地解决我的问题的一些想法。 感谢您的时间和帮助,

1 个答案:

答案 0 :(得分:1)

如果您正确操作数据,则不应该比现在拥有的更多。

在伪代码中,这是你需要做的:

foreach(order in orders)
{
   order.partlist = GetItem(order.name).parts; // partlist is a list of Part objects, not stored anywhere.
}
foreach(location in locations)
{
   foreach(order in GetOrdersAtLocation(location))
   {
      foreach(part in order.parts)
      {
         location.partlist += { part.name, part.quantity * order.quantity }; // partlist is a list of parts and quantities, to be displayed.
      }
   }
 }

我会在LINQ中这样做,但是既然你要求设计答案而不是代码,那么它或多或少会解开它。