gpt4 book ai didi

c# - 使用约束连接多个 IEnumerable

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:03 24 4
gpt4 key购买 nike

我有一个对象,其中包含通过不同方式分配的多个优惠。一个 Offer 仅针对一个 Product,一个对象有多个 Offer。现在,我希望一个对象的所有报价都遵循一个产品只包含一次的特定业务逻辑。

目前我是这样实现的:

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 方法调用的顺序,并且产品仅包含一次。

任何能帮助我更好地解决这个问题的东西都是非常欢迎的!

最佳答案

此代码与我所相信的“等效”。

var offers = ov.Offers.Where(o => o.OfferType == composedOffer)
.Concat(ov.Offers.Where(o => o.OfferType == simpleOffer))
.Concat(ov.ComposedOfferList.Offers)
.Concat(ov.SimpleOfferList.Offers)
.GroupBy(offer => offer.Product)
.Select(group => group.First())
.ToList();

var products = offers.Select(offer => offer.Product).ToList();

关于c# - 使用约束连接多个 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com