这个问题与我之前的一个问题非常相似,链接在这里:使用LINQ计算两个列表中存在的组合数,但有些进一步的变化。
我有一个
我有一个
CartItem
列表,可以根据在DiscountItem
列表中指定的项目获得折扣。我需要能够提取可以获得折扣的购物车中的项目,并应用在DiscountItem
中指定的适当折扣。只有存在每个组合时才应用折扣。以下是在折扣应用之前两个列表可能看起来像什么:
折扣前:棘手的部分在于,不仅仅是将两个列表连接在一起或计算组合数。折扣适用于出现在
CartItems DiscountItems ============================== =========================== SKU Qty DiscountApplied SKU DiscountAmount ============================== =========================== Ham 2 $0.00 Ham $0.33 Bacon 1 $0.00 Bacon $2.00 Ham 1 $0.00 Bacon 2 $0.00 Cheese 1 $0.00 Bacon 1 $0.00
CartItem
列表中的所有DiscountItem
组合。在上面的示例中有3个这样的组合,如果你按照迭代的方式在列表中应用3个组合的折扣,每次应用折扣后数据将如下所示:
第一次折扣后:
购物车商品 折扣商品 ============================== =========================== SKU 数量 已折扣金额 SKU 折扣金额 ============================== =========================== Ham 2 $0.33 Ham $0.33 Bacon 1 $2.00 Bacon $2.00 Ham 1 $0.00 Bacon 2 $0.00 Cheese 1 $0.00 Bacon 1 $0.00
第二次折扣后:
购物车商品 折扣商品 ============================== =========================== SKU 数量 已折扣金额 SKU 折扣金额 ============================== =========================== Ham 2 $0.66 Ham $0.33 Bacon 1 $2.00 Bacon $2.00 Ham 1 $0.00 Bacon 2 $2.00 Cheese 1 $0.00 Bacon 1 $0.00
第三次折扣后:
购物车商品 折扣商品 ============================== =========================== SKU 数量 已折扣金额 SKU 折扣金额 ============================== =========================== Ham 2 $0.66 Ham $0.33 Bacon 1 $2.00 Bacon $2.00 Ham 1 $0.33 Bacon 2 $4.00 Cheese 1 $0.00 Bacon 1 $0.00
最终,除了奶酪和额外的培根之外,所有东西都有折扣。奶酪没有打折,因为它不在列表中的打折商品里。额外的培根没有享受到优惠,因为它没有对应的火腿商品,无法符合折扣组合的条件。总共有3个火腿和4个培根,所以其中一个培根不会得到折扣。
我想我应该可以使用 LINQ 来解决这个问题,因为它涉及枚举两个单独的列表,但是我不知道应该使用哪些 LINQ 方法来实现这一点。LINQ 查询的最终结果应该是已应用折扣的CartItem
集合。