Pregunta

Tengo objetos que tiene una propiedad DateTime, ¿Cómo puedo consultar para el objeto más antiguo?

Después de preguntar en el foro db4o, me da la respuesta:

Es muy fácil: crear una ordenada SODA-Query and tomar la primera último objeto / desde el ObjectSet resultante. No repetir la ObjectSet (no se activan por lo tanto los objetos), acaba de tomar el objeto requerido directamente a través de #ObjectSet.Get(index).

Tenga en cuenta: db4o soporta sólo un conjunto limitado de granulometrías performant (alfabéticos, números ID de objeto) en ejecución de la consulta, por lo que tal vez usted tiene que almacenar su fecha y hora como milisegundos para lograr un buen rendimiento.

¿Fue útil?

Solución

En primer lugar, el objeto necesita para realizar un seguimiento de la misma época, por lo que depende de sus necesidades:

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

Ahora, se puede consultar para el objeto en cualquier forma que desee, utilizando LINQ, la soda, o consultas nativas, por ejemplo.

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

Sin embargo, hay una serie de trampas:

  1. No utilice DateTime en su objeto persistido. He tenido grandes problemas con ellos. No puedo reproducir el problema así que no podía informar de ello todavía, pero yo personalmente no puedo recomendar su uso. Use un lugar long y copiar las garrapatas de la respectiva DateTime. Almacenar todo el tiempo en UTC, a menos que usted se refiere explícitamente a la hora local, como en el caso de los horarios de autobuses.
  2. Poner un índice en el momento
  3. La operación orden podría ser muy, muy lento para grandes cantidades de objetos debido a tema SIDO CO- 1133 . Si usted tiene una gran cantidad de objetos y sabes la edad aproximada del objeto, trata de imponer una restricción where, porque eso va a ser rápido. Ver también mi entrada de blog con respecto a ese problema de rendimiento, lo que puede llegar a ser muy molesto ya en ~ 50-100k objetos.

Mejor, España Chris

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top