我有两个清单:
两个单独的sql查询结果。
第二个列表有一个'ProductId'。
我目前正在做的是:
foreach(var product in Products)
var productWarehouses = Warehouses.Where(x=> x.ProductId == productId).ToList();
product.Warehouses = productWarehouses;
事情是,这需要非常非常长的时间。
注意:我尝试将产品拆分为多个列表并使用Parallel.Foreach()和Tasks来缩短时间 - 但仍然需要很长时间。
答案 0 :(得分:1)
使用Join
而不是对另一个集合中的每个项目的整个集合进行线性搜索:
var query = from product in Products
join warehouse in Warehouses
on product.productId equals warehouse.ProductId
into warehouses
select new
{
product,
warehouses,
};
答案 1 :(得分:0)
我宁愿在SQL存储过程中这样做,而不是在c#中这样做。从一个sql获取所有详细信息,然后迭代结果以创建产品列表。
答案 2 :(得分:0)
在Dictionary<int, Product>
中使用Products
作为密钥创建Product.ProductID
:
var pd = Products.ToDictionary(p => p.ProductID, p => p);
然后您可以遍历仓库并快速查找适当的产品:
foreach (var wh in Warehouses)
{
pd[wh.ProductId].Warehouses.Add(wh); //supposed Product.Warehouses lists have already been created, if not, add checks and create them as needed.
}