gpt4 book ai didi

c# - LINQ - 左外连接将列表附加到父对象

转载 作者:行者123 更新时间:2023-11-30 20:26:40 24 4
gpt4 key购买 nike

我有:

List<Company> companies;
List<Product> products;

我想将 CompanyID 与父级匹配的相关产品对象附加到 Company.Products 列表中。请注意,公司不一定有产品。执行此操作的最高效方法是什么?林奇?

现在我正在做一个:

foreach(Company c in companies)
{
c.Products = products.Where(x => x.CompanyID == c.CompanyID).ToList();
}

但这很慢!!

供引用的类定义:

class Company
{
int CompanyID;
string Name;
List<Product> Products;
}

class Product
{
int ProductID;
int CompanyID;
string ProductName;
}

最佳答案

所以你可以使用GroupJoin来做到这一点:

companies
.GroupJoin(products, c => c.CompanyID, p => p.CompanyID, (c, pg) =>
new Company
{
Products = pg.ToList(),
CompanyID = c.CompanyID
//other properties
});

GroupJoin 使用散列匹配,因此它比嵌套循环更有效。

要附加这些值,您可以简单地执行以下操作:

var companiesWithProducts = companies
.GroupJoin(products, c => c.CompanyID, p => p.CompanyID, (c, pg) =>
new { Company = c, Products = pg });

foreach (var p in companiesWithProducts)
{
p.Company.Products = p.Products.ToList();
}

关于c# - LINQ - 左外连接将列表附加到父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49534066/

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