さまざまな方法で複数のオファーが割り当てられたオブジェクトがあります。オファーは正確に 1 つの製品に対するものであり、オブジェクトには複数のオファーがあります。ここで、製品が一度だけ含まれる特定のビジネス ロジックに従うオブジェクトのすべてのオファーが必要です。
現時点では、次のように実装しました。
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 メソッド呼び出しの順序と、製品が 1 回だけ含まれることです。
この問題をよりよく解決するのに役立つものは何でも大歓迎です!