Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
db4o:LINQ等价于SODA查询?_Linq_Db4o_Soda - Fatal编程技术网

db4o:LINQ等价于SODA查询?

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()

对于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();
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(“苹果”)。