Domanda

Io sono oggetti che è un DateTime proprietà, come posso query per il più antico oggetto?

Dopo aver chiesto su db4o forum, ho la risposta:

È molto facile:creare un ordinato SODA-Query and prendere il primo / ultimo oggetto risultante dalla ObjectSet.Non scorrere l' ObjectSet (quindi gli oggetti non essere attivato), basta prendere l'oggetto richiesto direttamente tramite #ObjectSet.Get(index).

Si prega di notare:db4o supporta solo un numero limitato di performante sortings (in ordine alfabetico, numeri di id di oggetto) in esecuzione della query, quindi forse è per memorizzare la vostra data e ora come millisecondi per ottenere buone prestazioni.

È stato utile?

Soluzione

prima di tutto, l'oggetto ha bisogno di tenere traccia del tempo per sé, quindi, dipende dalle vostre esigenze:

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

Ora, è possibile eseguire una query per l'oggetto in qualsiasi modo ti piace, usando Linq, SODA, o Nativo Query, ad esempio

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

Tuttavia, c'è una serie di insidie:

  1. Non utilizzare DateTime nel tuo oggetto persistente.Ho avuto enormi problemi con loro.Non riesco a riprodurre il problema, quindi io non potevo segnalare ancora, ma io personalmente non ne raccomanda l'utilizzo.Utilizzare un long invece e copiare le zecche dai rispettivi DateTime.Archivio di tutti i tempi in UTC, a meno che non stai facendo esplicitamente riferimento all'ora locale, come nel caso degli orari degli autobus.
  2. Mettere un indice del tempo
  3. L'ordine di operazione potrebbe essere molto, molto lento per grandi quantità di oggetti a causa del problema COR-1133.Se si dispone di una grande quantità di oggetti e sai l'età approssimativa dell'oggetto, per cercare di imporre un where vincolare, perché sarà veloce. Vedi anche il mio blogpost per quanto riguarda che il problema di prestazioni, che può diventare molto fastidioso già a ~50-100k oggetti.

Migliori,
Chris

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top