使用 LINQ 联接列表<>与<列表<>

本文关键字:列表 LINQ 使用 | 更新日期: 2023-09-27 18:31:29

List<Products>具有如下List<ProductOffers>

class Products
{
   public List<ProductOffers> ProductOffers { get; set; }
}
class ProductOffers
{
    public string ProductOfferId { get; set; }
    public string ProductSubscription {get;set;}
}

还有另一个List<Offers>也有offerId.

class Offers
{
public string offerId {get;set;}
public string subscription{get;set;}
}

我想加入这两个列表取决于products.ProductOffers.ProductOfferId = offers.OfferId.然后我必须将匹配的订阅分配给产品订阅。如何使用 LINQ/lambda 表达式实现此目的?

使用 LINQ 联接列表<>与<列表<>

我在下面提供了一个解决方案。在此,我在ProductOffers类中添加了一个名为SetSubscription的新方法。请检查这是否有帮助。

class Program
    {
    static void Main(string[] args)
    {
        var products = new List<Products>();
        var offers = new List<Offers>();
        products.All(t => t.ProductOffers.All(s => s.SetSubscription(offers.First(r => r.OfferId == s.ProductOfferId))));
    }
}

public class Products
{
    public List<ProductOffers> ProductOffers { get; set; }
}
public class ProductOffers
{
    public string ProductOfferId { get; set; }
    public string ProductSubscription { get; set; }
    public bool SetSubscription(Offers offerDets)
    {
        if (offerDets != null)
        {
            this.ProductSubscription = offerDets.subscription;
            return true;
        }
        return false;
    }
}
public class Offers
{
    public string OfferId { get; set; }
    public string subscription { get; set; }
}

你可以使用它

    List<products> Prod=//assigned list of product.
    List<Offers> Offer=//assigned list of offer.
     List<Offers> filteredOffer=(from O in Offer
                         ((from sa in Prod where (sa.ProductOffers.Where(d => d.ProductOfferId == O.OfferId).Select(d=>d.ProductOfferId).Count()>0) select sa).Count()>0).toList();

现在,您可以使用此过滤Offers列表以供进一步使用