在Dictionary和List上使用LINQ查询

时间:2009-10-16 05:28:50

标签: linq

我有一个Dictionary<int, int> idsAndTypes = new Dictionary<int, int>();我有一个

List<Product> products = new List<Product>() 

作为产品清单,产品类别如下

class Product
{
public int Id {get;set;}
public int Type{get;set;}

}

字典idsAndTypes包含id和类型,现在我想在列表上使用linq查询来更新基于字典中id的产品类型.... 我知道另一种方式可能如下:

foreach (int item in idsAndTypes.Keys)
{
    Product.Where(product => product.Id == item).
      Select(product => product).ToList()[0].
      Type = idsAndTypes[item];
}

但我想用linq查询来避免foreach循环,有没有办法做到这一点? 请建议......

2 个答案:

答案 0 :(得分:3)

嗯,LINQ实际上是查询而不是更新

可能有一种没有循环的方法,但我认为循环是最干净的方式。但是,我不会使用该循环。你有一些非常快速查找的东西,而你只是在迭代它......然后在查找方面对数据结构进行查找(有效)。我这样做:

foreach (Product p in products)
{
    int type;
    if (idsAndTypes.TryGetValue(product.Id, out type))
    {
        p.LinkedProductType = type;
    }
}

这里有一个区别 - 它将使用字典中的值更新所有列表中的产品;您当前的代码只会使用给定的ID执行列表中的 first 产品。我希望这不是问题。

答案 1 :(得分:2)

您的示例代码非常混乱。但我认为你想要的是:

products = products.Select(p => 
  { 
    p.LinkedProductType = idAndTypes[p.ID]; 
    return p;
  }
);

虽然这应该达到目标,但我认为这是滥用LINQ。