c# - 有效链接两个列表

时间:2015-04-01 15:36:02

标签: c# list

我有两个清单:

  1. 产品
  2. 包含的产品和仓库组合列表     价格/数量等。
  3. 两个单独的sql查询结果。

    第二个列表有一个'ProductId'。

    我目前正在做的是:

    foreach(var product in Products)
         var productWarehouses = Warehouses.Where(x=> x.ProductId == productId).ToList();
         product.Warehouses = productWarehouses;
    

    事情是,这需要非常非常长的时间。

    注意:我尝试将产品拆分为多个列表并使用Parallel.Foreach()和Tasks来缩短时间 - 但仍然需要很长时间。

3 个答案:

答案 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.
}