我有一个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
循环,有没有办法做到这一点?
请建议......
答案 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。