2
我有一個對象,具有通過不同方式分配的多個商品。優惠僅適用於一種產品,而對象具有多種優惠。現在我想要一個對象的所有商品都遵循特定商業邏輯,即產品只包含一次。帶約束條件的Concat多個IEnumerables
在我已經實現如下所示的那一刻:
List<Offer> offers = new List<Offer>();
List<Product> products = new List<Product>();
this.AddOffersToList(offers, products, ov.Offers.Where(o => o.OfferType == composedOffer));
this.AddOffersToList(offers, products, ov.Offers.Where(o => o.OfferType == simpleOffer));
this.AddOffersToList(offers, products, ov.ComposedOfferList.Offers);
this.AddOffersToList(offers, products, ov.SimpleOfferList.Offers);
AddOffersToList方法:
private void AddOffersToList(List<Offer> offers, List<Product> products,IEnumerable<Offer> newOffers)
{
foreach (Offer offer in newOffers)
{
// add offer only if the product is not contained yet
if (!products.Contains(offer.Product))
{
offers.Add(offer);
products.Add(offer.Product);
}
}
}
這似乎不是最優雅的表現方式。 「約束」是AddOffersToList方法調用的順序,並且該產品僅包含一次。
任何能夠幫助我更好地解決此問題的方法非常受歡迎!
我認爲這段代碼沒有考慮到這個順序。如果我在ov.Offers.Where(o => o.OfferType == composedOffer)中有產品x,而且在我們說ov.SimpleOfferList.Offers中,獲取第一個結果中的優惠非常重要。 – niklr
在編寫單元測試之後,我能夠證明你的代碼正在做我想做的事。非常感謝! :) – niklr