db4o: LINQ эквивалент запроса SODA? - PullRequest
0 голосов
/ 23 февраля 2011

Для db4o я пытаюсь найти код LINQ, который генерирует следующую SODA:

    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 - это опускает дерево до конечного узла. Например, если вы хотите выбрать «APPLE» для даты «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 для каждого объекта, как в СУБД.

    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 Ответ

1 голос
/ 23 февраля 2011

Вы действительно хотите напрямую погрузиться в "Символ" с 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;
...