Pregunta

La siguiente consulta toma un tiempo para volver:

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

¿hay una manera de conseguir este trabajo correctamente? es decir, más rápido?

¿Fue útil?

Solución

Tal vez se ejecutó en una limitación de la db4o de consulta de optimización . Normalmente consultas nativos y LINQ-consultas se traducen en un bajo nivel SODA-consulta . Cuando esta optimización falla, db4o instancia los objetos en la base de datos con el fin de ejecutar la consulta. Como se puede imaginar esto puede ser bastante lento.

La mejor solución actual es utilizar un refresco directamente para este caso. Por ejemplo, una clase con una propiedad:

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

La consulta nativa como esto:

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

Puede ser representado por este SODA-consulta:

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())
{
    // 
}

Espero que las futuras versiones de la consulta-Optimizer apoyan este caso directamente.

Otros consejos

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