Question

La requête suivante prend un certain temps pour revenir:

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

est-il un moyen d'obtenir ce travail correctement? à-dire plus rapide?

Était-ce utile?

La solution

Peut-être vous a rencontré un limitation de -optimisation des requêtes de db4o. Normalement, les requêtes et les requêtes LINQ autochtones sont convertis en un faible niveau SODA-requête . Lorsque cette optimisation échoue, db4o instancie les objets dans la base de données afin d'exécuter la requête. Comme vous pouvez l'imaginer, cela peut être assez lent.

La meilleure solution actuelle est d'utiliser un SODA directement pour ce cas. Par exemple, une classe avec une propriété:

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

La requête native comme ceci:

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

Peut être représenté par cette 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())
{
    // 
}

J'espère que les futures versions du support ce cas de requête-Optimizer directement.

Autres conseils

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top