Вложенный Forloop с методом Remove и условием If с использованием LINQ - PullRequest
0 голосов
/ 06 июля 2011

Я хочу преобразовать приведенный ниже код в выражение 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>();

, но не смог выяснить, как удалитьэлемент цены при пр.Терм! 0.

Ответы [ 3 ]

0 голосов
/ 06 июля 2011

Здесь у вас есть:

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

Надеюсь, это поможет. Приветствия

0 голосов
/ 03 марта 2017

Если вы хотите удалить элемент цены, если Term = 0.Ниже приведен запрос

tempProduct.ForEach(p=> p.Prices.Remove(p.Prices.ToList().ToList().Where(x => x.Term == 0).FirstOrDefault()));
0 голосов
/ 06 июля 2011

Разве это не сработает и будет более кратким ...

tempProduct.RemoveAll(p => p.Prices.Count == 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...