2010-02-07 60 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