Domanda

La seguente query richiede un po 'per tornare:

db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))

c'è un modo per ottenere questo lavoro correttamente? vale a dire più veloce?

È stato utile?

Soluzione

Forse è stato eseguito in una limitazione di di db4o query ottimizzazione . Normalmente query nativi e LINQ-query sono tradotti in un livello basso SODA-query . Quando questa ottimizzazione non riesce, db4o un'istanza gli oggetti nel database, al fine di eseguire la query. Come potete immaginare questo può essere piuttosto lento.

La migliore soluzione attuale è quella di utilizzare una soda direttamente per questo caso. Per esempio una classe con una proprietà:

 public class SimpleObject
 {
     private string name;
     public string Name
     {
         get { return name; }
        set { name = value; }
     }
 }

La query nativa in questo modo:

var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));

Può essere rappresentata da questo SODA-Query:

IQuery query = db.Query();
query.Constrain(typeof (SimpleObject)); // restrict to a certain class
query.Descend("name").Constrain("Chr").StartsWith(false); // the field 'name' starts with  'chr', case-insensitive

foreach (var s in query.Execute())
{
    // 
}

Spero che le future versioni del query-Optimizer supportano questo caso direttamente.

Altri suggerimenti

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