db4o:LINQ等价于SODA查询?
对于db4o,我试图找到生成以下代码的LINQ代码:db4o:LINQ等价于SODA查询?,linq,db4o,soda,Linq,Db4o,Soda,对于db4o,我试图找到生成以下代码的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()
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”选择“苹果”,它将返回“苹果在周四”
数据结构:
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
};
var stringForDayAndSymbol=来自db4o.db.Query中的s(a=>a.SymbolGlobal==“苹果”)
从db4o.db.Query中的t开始(b=>b.Date==newdatetime(2010,10,20))
选择新的
{
s、 SymbolGlobal,
t、 日期,
t、 元
};
您真的想通过query.down(“Symbol”)直接进入“Symbol”吗代码>?我猜您想要约束类型“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;
我已经将这个答案标记为正确的,但是,如果您试图进入一个对象集合,例如任何使用IList实例化的对象,那么它将不起作用(集合似乎对SODA不可见)。嗯,我认为集合上的“包含”操作也应该对LINQ起作用。比如s.SymbolGlobal.Contains(“苹果”)。