none
Linq retornar data formato dd/mm/aaaa sem as horas RRS feed

  • Pergunta

  • Pessoal,

    Tenho a seguinte query:

     var obra = (from b in db.minha table
    				orderby b.minha_data
    				select new
    				   {
    					  b.minha_data 
    
    				   }).Distinct();

    Funciona sem problemas mas me devolve a data no formato dd/mm/aaaa 00:00:00.

    Coom retornar na própria query a data sem a hora?


    Ninguém falou que seria fácil!

    segunda-feira, 21 de maio de 2012 19:53

Respostas

  • Rafa,

    Sim, tem isso também, mais é facil contornar dando um new no objeto e passando uma classe.

    .Select(f => new ClasseTeste()

    {

        Data = f.Data.ToShortDateString();

    }

    public class ClasseTeste

    {

        public string Data {get; set;}

    }

    • Marcado como Resposta jothaz sábado, 29 de novembro de 2014 13:01
    terça-feira, 22 de maio de 2012 17:47

Todas as Respostas

  • b.minha_data.ToShortDateString()
    • Sugerido como Resposta EduardoPiresMVP segunda-feira, 21 de maio de 2012 21:22
    segunda-feira, 21 de maio de 2012 20:40
  • Tentei assim, mas nem roda retorna e nem roda a aplicação.

      b.minha_data.Value.ToShortDateString()
    
      b.minha_data.ToShortDateString()

    Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

    Assim roda, mas da erro em tempo de execução:

    dt_inventario =  b.dt_inventario.Value.ToShortDateString()
    

    LINQ to Entities não reconhece o método 'System.String ToShortDateString()', que não pode ser convertido em uma expressão de repositório.

    Alguma outra sugestão?


    Ninguém falou que seria fácil!

    segunda-feira, 21 de maio de 2012 21:46

  • Amigo, uma pena mas não rola... 

    Se estiver carregando um gridview use:
    <asp:BoundField DataFormatString="{0:n2}"



    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.

    segunda-feira, 21 de maio de 2012 21:58
  • Pois é contornei o problema formatando no GridView e DropDownList e funcionou bem.

    Porém gostaria de saber seu existe uma forma de devolver via o prórpio Linq como no SQL com o cast ou convert.

    Vi vários post sugerindo a solução postada pelo Cleber, mas não consegui fazer funcionar.

    Mas valeu a atenção.

    Agradeço a todos.


    Ninguém falou que seria fácil!

    segunda-feira, 21 de maio de 2012 22:28
  • Certeza que não funciona?

    Eu só utilizo assim, eu todos os meus projetos.

    Vou consultar sobre este erro, mais, tem que funcionar.

    terça-feira, 22 de maio de 2012 11:02
  • No select não tem como vc pre definir isso, vc só pode fazer isso qdo vc vai exibir os dados é assim que eu faço qdo vou jogar os dados para os textbox vc dá uma substring

    isso aqui

    if (!String.IsNullOrEmpty(dtimplantacao))
                {
                    txtdtimplantacao.Text = dtimplantacao.Substring(0, 10);
                }
                else
                {
                    txtdtimplantacao.Text = ent.ENT_DT_TREINAMENTO.ToString();
                }


    Junior

    terça-feira, 22 de maio de 2012 11:48
  • Cleber,

    Sinceramente não consegui fazer funcionar, então não posso dizer que não funciona.

    Como disse vi vários post´s sugerindo eta abordagem, inclusive para mascarar datas não retornadas pelo Linq via SQL mesmo. E usando o ToString("dd/MM/aaaa") nunca consegui que funcionasse.

    Pode ser alguma orelhada minha.

    Na esxpressão:

    var obra = (from b in db.minha table
    				orderby b.minha_data
    				select new
    				   {
    					  b.minha_data 
    
    				   }).Distinct();

    Retorna os erros que postei.

    Como disse contornei a situação aplicando a mascara diretamente no gird e no listview.

    Abri o post só para certificar que não teria uma outra forma de abordar o problema.

    Mas agradeço a atenção e a dica.





    Ninguém falou que seria fácil!

    terça-feira, 22 de maio de 2012 11:56
  • Foi o que falei, vc aplica a máscara qdo vai exibir os dados e não na consulta.

    Junior

    terça-feira, 22 de maio de 2012 12:54
  • Junior,

    Eu faço tudo na consulta, e nunca tive problema.

    Mais se deu certo, ok.

    terça-feira, 22 de maio de 2012 13:00
  • Antes qdo usava select normal eu fazia assim:

    select convert(varchar(10), campo,103) as data

    e a data já vinha formatada dd/mm/yyyy com linq isso não se aplica, então vc formata no componente que vai receber a informação gridview, formview e em textbox vai pela substring, pq esse informação formatada vc apenas a exibe, se for gravar basta converter para datetime.


    Junior

    terça-feira, 22 de maio de 2012 13:06
  • Cleber, eu fui correr atras de uma resposta para essa questão tb mas quando fui ver os métodos de formatação de data, vi que mto provavelmente não daria certo.

    A minha teoria é que se o campo na tabela é do tipo DateTime e ele não tem o AllowNull setado, o LINQ interpreta exatamente como um campo de data. Se o AllowNull estiver marcado, ele precisará de um CAST. Não é esse o problema. O que acontece é que o método ToShortDateString() retorna uma STRING. Então haverá um conflito, pois o SELECT está esperando retornar um DateTime.


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    terça-feira, 22 de maio de 2012 14:23
  • Pessoal, agredeço a atenção e as respostas.

    Na verdade logo após efetuar os post resolvi o problema aplicando a mascara nos controles.

    Como estava acostumado a devolver a data formatada via convert ou cast direto da expressão SQL, fiquei curioso em como fazê-lo o Linq.

    Como já disse vi vários post´s sugerindo o uso do ToString("dd/MM/yyyy") ou  ToShortDateString() como não cosnegui que funcionasse achei que era algum erro da minha parte.

    Inclusive unca consegui que ToString("dd/MM/yyyy") funcionasse em nunhum escopo.

    Pelas respostas o caminho é mesmo tratar nos controles e dexar o Linq puro e imaculado.


    Ninguém falou que seria fácil!

    terça-feira, 22 de maio de 2012 15:29
  • Rafa,

    Sim, tem isso também, mais é facil contornar dando um new no objeto e passando uma classe.

    .Select(f => new ClasseTeste()

    {

        Data = f.Data.ToShortDateString();

    }

    public class ClasseTeste

    {

        public string Data {get; set;}

    }

    • Marcado como Resposta jothaz sábado, 29 de novembro de 2014 13:01
    terça-feira, 22 de maio de 2012 17:47
  • ahahahah demais!!! vc praticamente hackeou o LINQ.

    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    terça-feira, 22 de maio de 2012 17:54