2011-02-23 49 views
0

對於db4o的,我試圖找到產生以下SODA的LINQ代碼:db4o:SODA查詢的LINQ等價物?

var query = db4o.db.Query(); 
    query.Descend("Symbol");   
    query.Descend("_symbolGlobal").Constrain("APPLE"); 
    query.Descend("_date"); // Add a date constraint here. 
    IObjectSet result = query.Execute(); 

所有SODA確實是下拉樹的末端節點。例如,如果您想爲日期「2010-10-18」選擇「APPLE」,則會返回「週四的蘋果」。

數據結構:

Root ----Symbol (APPLE)     
    |   |------Day 1: Date: 2010-10-18, string "Apples on Thursday" 
    |   |------Day 2: Date: 2010-10-19, string "Apples on Friday" 
    | 
    | 
    |-----Symbol (PEAR)    
       |------Day 1: Date: 2010-10-18, string "Pears on Thursday" 
       |------Day 2: Date: 2010-10-19, string "Pears on Friday" 

這是我第一次嘗試,不作爲其獲得跨產品工作(即它的尋找每一個可能的組合)。我無法使用連接,因爲db4o是對象數據庫,並且您無權訪問每個對象的ID,例如在RDBMS中。

var stringForDayAndSymbol = from s in db4o.db.Query<Symbol>(a => a.SymbolGlobal == "APPLE") 
          from t in db4o.db.Query<Date>(b => b.Date == new DateTime(2010, 10, 20)) 
          select new 
          { 
          s.SymbolGlobal, 
          t.Date, 
          t.Meta 
          }; 

回答

1

你真的直接想要下降到「符號」與query.Descend("Symbol");?我想你想約束的類型'符號'。我只是假設,你的意思是這樣的:

var query = db4o.db.Query(); 
query.Constrain(typeof(Symbol));   
query.Descend("_symbolGlobal").Constrain("APPLE"); 
query.Descend("_date"); // Add a date constraint here. 
IObjectSet result = query.Execute(); 

不是100%肯定,但應該是這樣的:

// I assume here that the field _symbolGlobal is accessable with the property SymbolGlobal 
// and the field _date is accessable with the property Date 
var result = from Symbol s in db4o.db 
      where s.SymbolGlobal == "APPLE" 
      select s.Date; 
+0

我已經打上這個答案是正確的,但是,如果你試圖降落成爲一個對象的集合,比如任何用IList實例化的對象,那麼它將不起作用(集合對於SODA來說似乎是不可見的)。 – Contango

+0

嗯,我認爲集合上的'contains'操作也應該與LINQ一起工作。像s.SymbolGlobal.Contains(「Apple」)。 – Gamlor