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