Pergunta

Eu tenho objetos que possuem uma propriedade DateTime, como posso consultar o objeto mais antigo?

Depois de perguntar no fórum do DB4O, recebo a resposta:

É muito fácil: crie um classificado SODA-Query and Pegue o primeiro / último objeto do resultante ObjectSet. Não itera o ObjectSet (portanto, os objetos não serão ativados), basta pegar o objeto necessário diretamente via #ObjectSet.Get(index).

Observação: o DB4O suporta apenas um conjunto limitado de classificações de desempenho (alfabéticas, números, IDs de objetos) na execução da consulta, então talvez você precise armazenar seu DateTime como milissegundos para obter um bom desempenho.

Foi útil?

Solução

Primeiro de tudo, seu objeto precisa acompanhar o tempo em si, por isso depende de seus requisitos:

class Customer
{
    public DateTime DateSignedUp {get; private set;}
    // ...
}

Agora, você pode consultar o objeto da maneira que quiser, usando LINQ, refrigerante ou consultas nativas, por exemplo

IObjectContainer container = ...;
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First();

No entanto, há um conjunto de armadilhas:

  1. Não use DateTime em seu objeto persistido. Eu tive enormes problemas com eles. Não posso reproduzir o problema, então ainda não consegui relatá -lo, mas pessoalmente não recomendo usá -los. Use um long em vez disso e copie os ticks do respectivo DateTime. Armazene todos os momentos na UTC, a menos que você esteja se referindo explicitamente à hora local, como no caso de horários de ônibus.
  2. Coloque um índice no tempo
  3. A operação do pedido pode ser muito, muito lenta para grandes quantidades de objetos por causa de Edição COR-1133. Se você tem uma grande quantidade de objetos e conhece a idade aproximada do objeto, tente impor um where restringir, porque isso será rápido. Veja também meu post do blog Em relação a esse problema de desempenho, que já pode se tornar muito irritante em ~ 50-100k objetos.

melhor,
Chris

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top