Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

288
Visualizações
Is there a LINQ way to turn 2 line items into N based on quantity?

Here's code that works, but is there a LINQ way to turn 2 line items into N based on quantity?

var list = new List<LineItem>{
    new LineItem { Info = "two of these", Quantity = 2 },
    new LineItem { Info = "one of these", Quantity = 1 }
};
        
// prints two lines
// 2x - two of these
// 1x - one of these
foreach( var entry in list) Console.WriteLine(entry);

Console.WriteLine("now I want three lines printed as for the shopping bag");
// prints threes lines quantity driving that
// 2x - two of these
// 2x - two of these
// 1x - one of these
        
// this works, but is there a clean LINQy way?
var bag = new List<LineItem>();
foreach( var item in list)
{
    if ( item.Quantity == 1 )
        bag.Add(item);
    else
        for ( var count = 0 ; count < item.Quantity ; ++ count)
            bag.Add(item);
}
foreach( var entry in bag) Console.WriteLine(entry);
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

You can use a combination of SelectMany() and Enumerable.Repeat() to achieve what you want here. For example:

var list2 = list.SelectMany(x => Enumerable.Repeat(x, x.Quantity));

  • SelectMany() selects an element from each element x of the input. If any of these elements are sequences themselves, they are all flattened out into a single sequence (rather than say ending up with a list of lists)
  • Enumerable.Repeat() creates a new enumerable based on each item, containing item x repeated x.Quantity times.

Full listing as tested on .NetFiddle: https://dotnetfiddle.net/wpOafs

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public class LineItem
    {
        public string Info {get;set;}
        public int Quantity {get;set;}
    }
    public static void Main()
    {
        var list = new List<LineItem>{
            new LineItem { Info = "two of these", Quantity = 2 },
            new LineItem { Info = "one of these", Quantity = 1 }
    };
        
        var list2 = list.SelectMany(x => Enumerable.Repeat(x, x.Quantity));
        
        foreach(var item in list2)
        {
            Console.WriteLine(item.Info + item.Quantity);
        }
        
        Console.WriteLine("Hello World");
    }
}
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda