none
Formatar CNPJ numa consulta LINQ RRS feed

  • Pergunta

  • Pessoal, bom dia.

    Estou tentando formatar um campo string e não consigo. Retorna sempre o valor do campo sem a mascara.

    var lista = (from p in Pessoas.OfType<PessoaJuridica>()
    where p.EFornecedor == true
    select p)
    .AsEnumerable()
    .Select(x => new { x.PessoaID, x.NomeFantasia, CNPJ = Convert.ToInt64(x.CNPJ).ToString("##.###.###/####-##")});


    alexcanario

    quinta-feira, 4 de fevereiro de 2016 14:51

Respostas

  • Uma forma seria você usar metodos de extensão:

    Como?

    using System;
    
    public static class Methods
    {
    	public static string FormattedToCnpj(this long value)
    	{
    		return String.Format(@"{0:00\.000\.000\/0000\-00}", value);
    	}
    	
    }
    
    public class Program
    {
    	public static void Main()
    	{
    		long cnpj = long.Parse("19570720000111");
    		Console.WriteLine(cnpj);
    		Console.WriteLine(cnpj.FormattedToCnpj());
    	}
    }

    Dessa forma funcionaria e você não precisava repetir o código só utilizar !!! Também acho melhor não jogar essa responsabilidade, porque é um grande erro e vai ocasionar erros!

    Então!

    Faça um classe com namespace proprio e chame quando precisar:

    Exemplo:

    namespace Utils
    {
    	public static class Methods
    	{
    		public static string FormattedToCnpj(this long value)
    		{
    			return String.Format(@"{0:00\.000\.000\/0000\-00}", value);
    		}
    		
    	}
    }

    na hora que for percorrer a sua lista faça assim:

    using Utils;
    foreach(PessoaJuridica ju in lista)
    {
    	@ju.CNPJ.FormattedToCnpj()
    }

    Pronto, além de ficar num padrão não tem aquela sugerada de código.

    Só lembrando que o link2 funciona sim, perfeitamente!


    Fulvio C

    • Sugerido como Resposta robertosljunior quinta-feira, 4 de fevereiro de 2016 21:27
    • Marcado como Resposta Marcos SJ sexta-feira, 5 de fevereiro de 2016 17:52
    quinta-feira, 4 de fevereiro de 2016 20:49

Todas as Respostas

  • Olá Alex Canario,

    Tudo bem?

    Poderia verificar se estes artigos te auxiliam com a informação que você precisa:

    Link 01

    Link 02

    Link 03

    Link 04

    Link 05

    Link 06

    Não acha melhor validar isso com java sript antes de enviar o formulário?

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 4 de fevereiro de 2016 16:24
  • Obrigado Marcos.

    Não estou tentando validar o cnpj, na verdade só quero exibir numa grid formatado. Não encontrei outra maneira de formata-lo senão na consulta linq.

    Já havia tentando formatar como no link 02, mas tb não funcionou.

    Sds

    Alex


    alexcanario

    quinta-feira, 4 de fevereiro de 2016 19:22
  • Alex, substitui o '#' pelo 0
    quinta-feira, 4 de fevereiro de 2016 19:39
  • Uma forma seria você usar metodos de extensão:

    Como?

    using System;
    
    public static class Methods
    {
    	public static string FormattedToCnpj(this long value)
    	{
    		return String.Format(@"{0:00\.000\.000\/0000\-00}", value);
    	}
    	
    }
    
    public class Program
    {
    	public static void Main()
    	{
    		long cnpj = long.Parse("19570720000111");
    		Console.WriteLine(cnpj);
    		Console.WriteLine(cnpj.FormattedToCnpj());
    	}
    }

    Dessa forma funcionaria e você não precisava repetir o código só utilizar !!! Também acho melhor não jogar essa responsabilidade, porque é um grande erro e vai ocasionar erros!

    Então!

    Faça um classe com namespace proprio e chame quando precisar:

    Exemplo:

    namespace Utils
    {
    	public static class Methods
    	{
    		public static string FormattedToCnpj(this long value)
    		{
    			return String.Format(@"{0:00\.000\.000\/0000\-00}", value);
    		}
    		
    	}
    }

    na hora que for percorrer a sua lista faça assim:

    using Utils;
    foreach(PessoaJuridica ju in lista)
    {
    	@ju.CNPJ.FormattedToCnpj()
    }

    Pronto, além de ficar num padrão não tem aquela sugerada de código.

    Só lembrando que o link2 funciona sim, perfeitamente!


    Fulvio C

    • Sugerido como Resposta robertosljunior quinta-feira, 4 de fevereiro de 2016 21:27
    • Marcado como Resposta Marcos SJ sexta-feira, 5 de fevereiro de 2016 17:52
    quinta-feira, 4 de fevereiro de 2016 20:49
  • Acho que a resposta do Fulvio C responde sua pergunta.

    Somente para complementar, se o seu tipo for uma string você não precisa fazer coerção, utilize Substring.

    public static string ToCnpjFormat(this string text)
    {
            if (text.Length != 14)
                throw new ArgumentOutOfRangeException(text);
    
            return string.Format("{0}.{1}.{2}-{3}/{4}",
                                                        text.Substring(0, 2),
                                                        text.Substring(2, 3),
                                                        text.Substring(5, 3),
                                                        text.Substring(8, 4),
                                                        text.Substring(12, 2));
    }


    ROBERTOSLJUNIOR

    quinta-feira, 4 de fevereiro de 2016 21:38
  • Acho que a resposta do Fulvio C responde sua pergunta.

    Somente para complementar, se o seu tipo for uma string você não precisa fazer coerção, utilize Substring.

    public static string ToCnpjFormat(this string text)
    {
            if (text.Length != 14)
                throw new ArgumentOutOfRangeException(text);
    
            return string.Format("{0}.{1}.{2}-{3}/{4}",
                                                        text.Substring(0, 2),
                                                        text.Substring(2, 3),
                                                        text.Substring(5, 3),
                                                        text.Substring(8, 4),
                                                        text.Substring(12, 2));
    }


    ROBERTOSLJUNIOR

    Se não me engano, ele mostrou um long, então, foi usado essa técnica devido ao tipo informado e para não ter outras conversões ...

    A sua vai servir realmente se o dado for do tipo String.

    Fulvio C

    quinta-feira, 4 de fevereiro de 2016 22:46