none
Comparar datas usando LINQ RRS feed

  • Discussão Geral

  • Boa tarde!
    estou com uma duvida como comparar datas em uma consulta LINQ ignorando a hora.

    Achei uma maneira na internet, funciona mas queria saber se não tem outra mais curta.

    Segue o codigo da maneira que eu achei: 

    public IList<Pedido> BuscaPedidosPagosPorData(DateTime data)
            {
                var db = new EntitiesConnection();
                var query = (from pe in db.PEDIDO
                             where pe.DATA_PAGAMENTO.Value.Day == data.Day && pe.DATA_PAGAMENTO.Value.Month == data.Month
                             && pe.DATA_PAGAMENTO.Value.Year == data.Year && pe.STATUS_PAGAMENTO == "pago"
                             select new Pedido
                             {

    Quero comparar se uma data do banco é igual a data atual (DateTime.Now) mas ignorando as horas das duas datas

    Valeu

    • Tipo Alterado Giovani Cr terça-feira, 1 de abril de 2014 19:33
    quarta-feira, 26 de março de 2014 18:54

Todas as Respostas

  • Olá, não precisa comparar tudo use Date :

    where pe.DATA_PAGEMENTO.Value.Date == DateTime.Now.Date
    select new Pedido

    quarta-feira, 26 de março de 2014 18:59
  • Ja tentei fazer isso e retorna a seguinte mensagem 

    "Não há suporte ao membro 'Date' do tipo especificado em LINQ to Entities. Somente inicializadores, membros de entidade e propriedades de navegação de entidade têm suporte."

    quarta-feira, 26 de março de 2014 19:08
  • Estranho, está usando ENtity ou Linq ? Assim não funciona :

    var query = db.Pedido.Where(w => w.DATA_PAGAMENTO.Value.Date == data.Date)
                         .Select(s => s);
    
    //se a coluna no banco nao permitir nulo retire o value
    DATA_PAGAMENTO.Date

    quarta-feira, 26 de março de 2014 19:16
  • Bernardo Cervo,

    Cara use o método TruncateTime da classe EntityFunctions,

    NameSpace

    using System.Data.Objects;

    Fica assim :
                public IList<Pedido> BuscaPedidosPagosPorData(DateTime data)
            {
                var db = new EntitiesConnection();
                var query = (from pe in db.PEDIDO
                             where EntityFunctions.TruncateTime(pe.DATA_PAGAMENTO.Value) ==  DateTime.Today && pe.STATUS_PAGAMENTO == "pago"
                             select new Pedido
                             {



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 19:18
  • Diego Almeida

    Fiz exatamente como você disse e deu essa mensagem:

    "Erro ao executar a definição do comando. Consulte a exceção interna para obter detalhes."

    quarta-feira, 26 de março de 2014 19:26
  • Certo,

    Pode postar o seu método completo para eu verificar????



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 19:33
  • Ta ai é bem simples já esta funcionando da forma que mencionei na pergunta, porem procuro uma outra maneira de comparar as datas

    Segue o metodo: 

            public IList<Pedido> BuscaPedidosPagosPorData(DateTime data)
            {
                var db = new EntitiesConnection();
                var query = (from pe in db.PEDIDO
                             where EntityFunctions.TruncateTime(pe.DATA_PAGAMENTO.Value) == DateTime.Today && pe.STATUS_PAGAMENTO == "pago"
                                 
                                 //where pe.DATA_PAGAMENTO.Value.Day == data.Day && pe.DATA_PAGAMENTO.Value.Month == data.Month
                             //&& pe.DATA_PAGAMENTO.Value.Year == data.Year && pe.STATUS_PAGAMENTO == "pago"
                             select new Pedido
                             {
                                 IdPedido = pe.ID,
                                 StatusPagamento = pe.STATUS_PAGAMENTO,
                                 StatusGatewayPagamento = pe.STATUS_GATEWAY_PAGAMENTO,
                                 ValorTotal = (Decimal)pe.VALOR_TOTAL,
                                 DataGeracao = pe.DATA_GERACAO,
                                 DataPagamento = pe.DATA_PAGAMENTO,
                                 DataExportacaoProt = pe.DATA_EXPORTACAO_ERP,
                                 DataAlteracao = pe.DATA_ALTERACAO,
                                 BonusConcedido = (Decimal)pe.BONUS_CONCEDIDO,
                                 FormaPagamento = (Int32)pe.FORMA_PAGAMENTO,
                                 IdFranquia = pe.FRANQUIA_ID,
                                 AdministradoraId = (Int32)pe.ADMINISTRADORA_ID,
                                 AdministradoraNome = pe.ADMINISTRADORA_NOME
                             }).ToList();
    
                
    
                return query

    quarta-feira, 26 de março de 2014 19:37
  • Bernardo Cervo,

    Estranho, vc deu um Build no solution ????  fiz o teste aqui e funcionou perfeitamente !!!!!



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 20:08
  • diego de Almeida

    Sim e continua dando a mesma mensagem, muito estranho

    quarta-feira, 26 de março de 2014 20:21
  • diego de Almeida

    Sim e continua dando a mesma mensagem, muito estranho

    Bom Bernardo Cervo, 

    se poderia fazer o seguinte teste:

    var db = new EntitiesConnection(); var query = (from pe in db.PEDIDO where EntityFunctions.TruncateTime(pe.DATA_PAGAMENTO.Value) == DateTime.Today && pe.STATUS_PAGAMENTO == "pago"

    select pe).ToList();

    verifique se agora pelo menos carregou a Query ou pelo menos executou sem erros ... !!!

    ???


    Fulvio Cezar Canducci Dias

    quarta-feira, 26 de março de 2014 20:36
  • Fúlvio Cezar,

    Continua dando a mensagem: "Erro ao executar a definição do comando. Consulte a exceção interna para obter detalhes."

    quarta-feira, 26 de março de 2014 20:47
  • Bernardo Cervo,

    qual a versão do EntityFramework vc esta usando ?



    Diego Almeida Barreto
    System Analyst / Software Developer

    quarta-feira, 26 de março de 2014 20:48
  • Fúlvio Cezar,

    Continua dando a mensagem: "Erro ao executar a definição do comando. Consulte a exceção interna para obter detalhes."

    Repasse seu modelo de tabela, o create table dela aqui na parte código por favor!


    Fulvio Cezar Canducci Dias

    quarta-feira, 26 de março de 2014 20:48
  • Versão 4
    quarta-feira, 26 de março de 2014 21:05
  • Segue:

    CREATE TABLE .PEDIDO
    	(
    	ID                       INT NOT NULL auto_increment,
    	STATUS_PAGAMENTO         VARCHAR (45) NULL,
    	STATUS_GATEWAY_PAGAMENTO VARCHAR (45) NULL,
    	VALOR_TOTAL              DECIMAL (10,2) NULL,
    	DATA_GERACAO             DATETIME NULL,
    	DATA_PAGAMENTO           DATETIME NULL,
    	DATA_EXPORTACAO_ERP      DATETIME NULL,
    	DATA_ALTERACAO           DATETIME NULL,
    	BONUS_CONCEDIDO          DECIMAL (10,2) NULL Default 0.00,
    	PRIMARY KEY (ID)
    
    	);

    quarta-feira, 26 de março de 2014 21:19
  • Segue:

    CREATE TABLE .PEDIDO
    	(
    	ID                       INT NOT NULL auto_increment,
    	STATUS_PAGAMENTO         VARCHAR (45) NULL,
    	STATUS_GATEWAY_PAGAMENTO VARCHAR (45) NULL,
    	VALOR_TOTAL              DECIMAL (10,2) NULL,
    	DATA_GERACAO             DATETIME NULL,
    	DATA_PAGAMENTO           DATETIME NULL,
    	DATA_EXPORTACAO_ERP      DATETIME NULL,
    	DATA_ALTERACAO           DATETIME NULL,
    	BONUS_CONCEDIDO          DECIMAL (10,2) NULL Default 0.00,
    	PRIMARY KEY (ID)
    
    	);

    Certo,

    Pra tirar a duvida , qual versão do SQL você ta usando ?? 2005 , 2008  .....



    Diego Almeida Barreto
    System Analyst / Software Developer

    quinta-feira, 27 de março de 2014 13:27
  • estamos usando para esse projeto o MySql

    quinta-feira, 27 de março de 2014 13:34
  • estamos usando para esse projeto o MySql

    A primeiro post é a solução do seu problema e realmente na ocasião a melhor forma que você mesmo já tinha solucionado. A EntityFuncions (DbFunctions na versão mais atual), é para SQL Server ...


    Fulvio Cezar Canducci Dias

    sexta-feira, 28 de março de 2014 19:59
  • estamos usando para esse projeto o MySql

    A primeiro post é a solução do seu problema e realmente na ocasião a melhor forma que você mesmo já tinha solucionado. A EntityFuncions (DbFunctions na versão mais atual), é para SQL Server ...


    Fulvio Cezar Canducci Dias

    poi sé até agora essa foi a unica solução,

    Mas mesmo assim Valeu pela ajuda

     
    sexta-feira, 28 de março de 2014 20:13