嵌套For循环使用Remove方法和If条件使用LINQ

时间:2011-07-06 07:44:14

标签: c# jquery linq lambda nested

我想将以下代码转换为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时删除price元素。

3 个答案:

答案 0 :(得分:0)

这会不起作用并且更简洁......

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

答案 1 :(得分:0)

你有:

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

希望这会有所帮助。干杯

答案 2 :(得分:0)

如果您想删除price元素,如果Term = 0。以下是查询

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