How to concatenate Strings into a Linq query

Asked

Viewed 745 times

3

How do I concatenate the column Sistemas, leaving Sistema, Sistemas 2?

I have this appointment Linq:

var fiscalizacoesBaixadas = (from tb_fiscalizacoes_campo in _context.TB_FISCALIZACOES_CAMPO
             join tb_fiscalizacoes in _context.TB_FISCALIZACOES 
                on tb_fiscalizacoes_campo.FIS_ID equals tb_fiscalizacoes.FIS_ID
             join tb_concessionarias in _context.TB_CONCESSIONARIAS 
                on tb_fiscalizacoes.CON_ID equals tb_concessionarias.CON_ID
             join tb_municipios in _context.TB_MUNICIPIOS 
                on tb_fiscalizacoes_campo.MUN_ID equals tb_municipios.MUN_ID
             join tb_fiscalizacoes_campo_sistemas in _context.TB_FISCALIZACOES_CAMPO_SISTEMAS 
                on tb_fiscalizacoes_campo.FIS_ID equals tb_fiscalizacoes_campo_sistemas.FIS_ID
             join tb_sistemas in _context.TB_SISTEMAS
                on tb_fiscalizacoes_campo_sistemas.SIS_ID equals tb_sistemas.SIS_ID
             join tb_fiscalizacoes_campo_ugr in _context.TB_FISCALIZACOES_CAMPO_UGR 
                on tb_fiscalizacoes_campo.FIS_ID equals tb_fiscalizacoes_campo_ugr.FIS_ID
             join tb_ugr in _context.TB_UGR
                on tb_fiscalizacoes_campo_ugr.UGR_ID equals tb_ugr.UGR_ID
             select new
             {
                 Id = tb_fiscalizacoes.FIS_ID,
                 Concessionaria = tb_fiscalizacoes.TB_CONCESSIONARIAS.CON_NOME_FANTASIA,
                 Municipio = tb_municipios.MUN_NOME_MUNICIPIO,
                 UGR = tb_ugr.UGR_NOME,
                 Sistemas = tb_sistemas.SIS_NOME,
                 DataInicio = tb_fiscalizacoes_campo.FIC_DATA_INICIO,
                 DataFim = tb_fiscalizacoes_campo.FIC_DATA_FIM
             });
dataGridFiscalizacoes.ItemsSource =fiscalizacoesBaixadas.Distinct().ToList();

That brings me these Results:

Exemplo inserir a descrição da imagem aqui

When I add a GroupBy, the lines are no longer duplicated, but still need the Strings are concatenated.

dataGridFiscalizacoes.ItemsSource = fiscalizacoesBaixadas.Distinct().GroupBy(x => x.Id).ToList();
  • 1

    What is the reason of -1? I think if you don’t understand, you should warn me and ask.

2 answers

1

You would have to derive the return list again, using the first record as referential and aggregating the systems:

dataGridFiscalizacoes.ItemsSource = fiscalizacoesBaixadas
                    .Distinct()
                    .GroupBy(x => x.Id)
                    .Select(g => new {
                            Id = g.Key,
                            Concessionaria = g.ToList().First().Concessionaria,
                            Municipio = g.ToList().First().Municipio,
                            UGR = g.ToList().First().UGR,
                            Sistemas = g.ToList().Aggregate("", (str, registro) => str + ", " + registro.Sistemas),
                            DataInicio = g.ToList().First().DataInicio,
                            DataFim = g.ToList().First().DataFim
                        }).ToList();

There being more doubt, see this response.

0

Add a new Select after the GroupBy concatenating the string you need:

dataGridFiscalizacoes.ItemsSource = fiscalizacoesBaixadas.Distinct().GroupBy(x => x.Id).Select(y => new
{
    Id = y.First().Id,
    Concessionaria = y.First().Concessionaria,
    Municipio = y.First().Municipio,
    UGR = y.First().UGR,
    DataInicio = y.First().DataInicio,
    DataFim = y.First().DataFim,        

    // Concatena o campo Sistemas dos registros deste agrupamento.
    Sistemas = string.Join(", ", y.Select(registro => registro.Sistemas))
}).ToList();

Browser other questions tagged

You are not signed in. Login or sign up in order to post.