C# Db4o启动并忽略大小写

C# Db4o启动并忽略大小写,c#,db4o,C#,Db4o,以下查询需要一段时间才能返回: db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase)) db.Query(x=>x.StartsWith(“Chr”,StringComparison.CurrentCultureIgnoreCase)) 有没有办法让它正常工作?ie更快?在正在比较的列上添加和索引可能会有所帮助 也许你遇到了一个限制。通常,本机查询和LINQ查

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

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

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

在正在比较的列上添加和索引可能会有所帮助


也许你遇到了一个限制。通常,本机查询和LINQ查询被转换为低级查询。当优化失败时,db4o实例化数据库中的对象以执行查询。正如你所能想象的,这可能相当缓慢

目前最好的解决办法是在这种情况下直接使用苏打水。例如,具有一个属性的类:

 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));

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

有趣的“从何而来?哦,复制和过去的错误,我已经修复了它。原始示例使用“有趣”作为搜索词;)你是谁,加莫。。您已经回答了我发布的几个Db4o问题:D非常感谢。在你发布这篇文章之前,我实际上将我的代码移动到了一个SODA查询,这使它更快了。。搬到一个IList而不是IList只是一种痛苦。。在文档中,它将Linq查询转换为SODA查询。。也许在表达式翻译中有解决此问题的方法。。也许可以看看我是否可以修复它并提供一些方法:D感谢大家的帮助LINQ和Native Query通常都很喜欢SODA。对于StartWith/EndWith的LIQ实现,有一个建议的补丁可用。但是它还没有(尚未)集成到常规的源代码中:感谢您指出Gamlor,我正在学习将来使用Lucene进行全文搜索,这将解决我当前的许多搜索问题
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())
{
    // 
}