Db4o StartsWith并忽略大小写

时间:2010-02-07 13:35:46

标签: c# db4o

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

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

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

2 个答案:

答案 0 :(得分:2)

也许你遇到了db4o’s query-optimization的限制。通常,本机查询和LINQ查询被转换为低级SODA-query。当此优化失败时,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())
{
    // 
}

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

答案 1 :(得分:0)