嵌套的带有Remove方法的Forloop和使用LINQ的If条件

本文关键字:LINQ If 条件 Forloop Remove 方法 嵌套 | 更新日期: 2023-09-27 18:01:11

我想将下面的代码转换为LINQ或Lambda表达式。

for (int indexprod = 0; indexprod < tempProduct.Count; indexprod++)
{
  for (int index = 0; index < tempProduct[indexprod].Prices.Count; index++)
  {
    if (tempProduct[indexprod].Prices[index].Term == null || tempProduct[indexprod].Prices[index].Term == 0)
    {
      tempProduct[indexprod].Prices.Remove(tempProduct[indexprod].Prices[index]);
      index--;
    }
  }
  if (tempProduct[indexprod].Prices.Count == 0)
  {
    tempProduct.Remove(tempProduct[indexprod]);
    indexprod--;
  }
}

我试着这样做:

List<Product> tempprod1= (from p in products
                     from pr in p.Prices
                     where pr.Term == 0
                     select p).ToList<Product>();

但无法找出如何在pr.Term时删除价格元素!0.

嵌套的带有Remove方法的Forloop和使用LINQ的If条件

这里有:

tempProduct
  .ForEach(p => p.Prices.RemoveAll(price => (price.Term ?? 0)==0 ))
  .RemoveAll(p => p.Prices.Count == 0);

希望这能有所帮助。干杯

这样会不会不起作用,而且更简洁。。。

tempProduct.RemoveAll(p => p.Prices.Count == 0);

如果您想在Term=0的情况下删除price元素。以下是查询

tempProduct.ForEach(p=> p.Prices.Remove(p.Prices.ToList().ToList().Where(x => x.Term == 0).FirstOrDefault()));