이 질문은 이전의 질문 중 하나 인 Use LINQ to count the number of combinations existing in two lists과 매우 유사합니다.LINQ를 사용하여 두 목록에있는 항목의 복잡한 조합 찾기
DiscountItem
에 지정된 항목을 기준으로 할인받을 수있는 CartItem
목록이 있습니다. 장바구니에서 할인을받을 수있는 품목을 꺼내서 DiscountItem
에 명시된 적절한 할인을 적용 할 수 있어야합니다. 할인은 존재하는 각 조합에만 적용됩니다. 여기에 두 목록은 할인이 적용되기 전에를 같이 할 수있는 작업은 다음과 같습니다
BEFORE DISCOUNT: 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 개 조합에 대한 할인을 적용한다면, 데이터는 할인이 적용되는 다음 각 시간과 같습니다
After 1st Discount is applied: CartItems DiscountItems ============================== =========================== SKU Qty DiscountApplied SKU DiscountAmount ============================== =========================== 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 After 2nd Discount is applied: CartItems DiscountItems ============================== =========================== SKU Qty DiscountApplied SKU DiscountAmount ============================== =========================== 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 After 3rd Discount is applied: CartItems DiscountItems ============================== =========================== SKU Qty DiscountApplied SKU DiscountAmount ============================== =========================== 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 개의 베이컨이 있으므로 배킹 중 하나는 할인을받지 못합니다.
2 개의 개별 목록을 열거해야하기 때문에 LINQ를 사용하여이 문제를 해결할 수 있어야한다고 생각하지만이 문제를 해결하는 데 사용할 LINQ 메서드를 생각할 수 없습니다. LINQ 쿼리의 최종 결과는 할인이 적용된 CartItem
의 모음이어야합니다.
당신이 당신의 카트 항목을 집계 할 수 있습니까? –
@ 닉 내가 할 수 있으면 좋겠지 만.그것은 나의 첫 번째 접근이었을 것이며 분명히 문제를 훨씬 쉽게 해결할 수 있었을 것입니다. –
여기 비즈니스 규칙에 대해 궁금합니다. 당신은 치즈와 "여분 베이컨"에는 할인이 적용되지 않을 것이라는 점을주의하십시오. 왜? 햄과 베이컨 모두 할인을 받는다는 점을 감안하면 규칙은 이해가 안가는 것 같습니다. 비즈니스 규칙을 명확히하면 솔루션을 공식화하는 데 도움이됩니다. – jrista