下面的查询需要一段时间才能返回:DB4O StartsWith和忽略大小写
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
有没有办法让这个正常工作?即更快?
下面的查询需要一段时间才能返回:DB4O StartsWith和忽略大小写
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
有没有办法让这个正常工作?即更快?
也许你跑进db4o’s query-optimization的限制。通常,本地查询和LINQ查询被翻译为低级SODA-query。当此优化失败时,db4o会实例化数据库中的对象以执行查询。你可以想象这可能会很慢。
目前最好的解决方案是直接为这种情况使用SODA。例如有一个属性的类:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
这样的本地查询:
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())
{
//
}
希望的未来版本:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
可以通过这个SODA查询表示查询优化器直接支持这种情况。
在你正在比较的列上添加和索引可能会有所帮助。
嗨,约翰,当你拿出StringComparison它会立即再次工作.. – 2010-02-08 02:43:51
“有趣”从哪里来? – 2010-02-08 21:35:26
噢,复制和过去的错误,我已修复它。最初的例子使用'有趣'作为搜索词;) – Gamlor 2010-02-08 22:29:58
你是谁加勒尔..你已经回复了我发布的几个Db4o问题:非常感谢。 之前,你发布这个我实际上移动我的代码到一个SODA查询,使其10000000x更快..它只是痛苦完全移动到IList而不是IList <> .. 在文档它的统计信息Linq查询被翻译成SODA查询..也许这里面的表达翻译这个问题有一个修复..可能看看我是否可以修复它,并提供一些如何:D 感谢帮助球员非常感谢 – 2010-02-09 12:52:26