How to concatenate strings in a Linq query

3

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

I have this query 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();

What brings me these results:

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

dataGridFiscalizacoes.ItemsSource = fiscalizacoesBaixadas.Distinct().GroupBy(x => x.Id).ToList();
    
asked by anonymous 20.12.2014 / 18:08

2 answers

1

You would have to derive the return list again, using the first record as a reference 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();

More questions, see this answer .

    
20.12.2014 / 19:24
0

Add a new Select after GroupBy by 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();
    
20.07.2015 / 16:46