none
Filtro de Datetime em Azure Tables Storage RRS feed

  • Pergunta

  • Olá, estou tentando criar um CreateQuery com o filtro por data, exemplo quero filtrar todas as vendas de uma determinada data, segue o exemplo que tentei fazer:

     

    (from vendas in CreateQuery<Venda>("Venda") select vendas).Where(p => p => p.Entrada.Date == data.Date ).ToList();

     

    Porém não consigo um resultado que espero, sempre vem vazio, quando eu faço a persistência eu coloco a data e a hora, mas para a pesquisa quero pesquisar apenas pela data. 

    Já tentei fazer com ToShortDateString() mas retorna um erro de incompatibilidade.

     

    Ficarei feliz se alguém conseguir me ajudar :D

    terça-feira, 15 de novembro de 2011 20:52

Respostas

  • Djonatas, quando trabalhamos com base NoSQL, uma prática recomendada é manter campos redundantes para facilitar as pesquisas. Ou seja, troca-se mais espaço armazenado (que é barato) por menos processamento (que é caro).

    No seu caso, eu recomendo manter duas colunas, uma com a data e a hora, e outra redundante somente com a data.

    Você pode usar esta coluna redundante para fazer o filtro por data.

    Por exemplo, gravando dados assim:

    contato.Data = System.DateTime.UtcNow.Date;
    contato.DataEHora = System.DateTime.UtcNow;
    

    e lendo assim:

    DataSource ds = new DataSource();
    DateTime data = System.DateTime.UtcNow.Date;
    List<Contato> contatos = (from c in ds.Contexto.Contato select c).Where(p => p.Data == data).ToList();
    

    Note que como o Table Service não possui índices secundários, essa pesquisa não será otimizada. Ou seja, potencialmente irá ler toda a tabela (ou partição) e filtrar a data via processamento.
    Se o filtro por data for frequente, considere gravá-la na coluna RowKey, que é indexada.


    segunda-feira, 21 de novembro de 2011 11:40