2010-02-07 116 views

回答

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

这样的本地查询:

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查询表示查询优化器直接支持这种情况。

+0

“有趣”从哪里来? – 2010-02-08 21:35:26

+0

噢,复制和过去的错误,我已修复它。最初的例子使用'有趣'作为搜索词;) – Gamlor 2010-02-08 22:29:58

+0

你是谁加勒尔..你已经回复了我发布的几个Db4o问题:非常感谢。 之前,你发布这个我实际上移动我的代码到一个SODA查询,使其10000000x更快..它只是痛苦完全移动到IList而不是IList <> .. 在文档它的统计信息Linq查询被翻译成SODA查询..也许这里面的表达翻译这个问题有一个修复..可能看看我是否可以修复它,并提供一些如何:D 感谢帮助球员非常感谢 – 2010-02-09 12:52:26