以下查询需要一段时间才能返回:

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

有没有办法让它正常工作?即更快?

有帮助吗?

解决方案

也许您遇到了以下限制 db4o 的查询优化. 。通常,本机查询和 LINQ 查询会被转换为低级查询 SODA查询. 。当此优化失败时,db4o 会实例化数据库中的对象以执行查询。正如您可以想象的那样,这可能会非常慢。

对于这种情况,当前最好的解决方案是直接使用 SODA。例如,具有一个属性的类:

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

原生查询如下:

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

可以用这个 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())
{
    // 
}

我希望查询优化器的未来版本能够直接支持这种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top