Jon、Jared 和 yshuditelu 给出的答案使用示例查询,这在很大程度上是未使用的 DB4o 查询机制,将来可能会被弃用。
在 DB4O for .NET 上进行查询的首选方法是本机查询和 LINQ。
// Query for all Pilots using DB4O native query:
var result = db.Query<Pilot>();
或者使用 Linq-to-DB4O:
// Query for all Pilots using LINQ
var result = from Pilot p in db
select p;
如果您在编译时知道类型(例如 Pilot),则这两项工作都可以。如果您在编译时不知道类型,则可以改用 DB4O SODA 查询:
var query = db.Query();
query.Constrain(someObj.GetType());
var results = query.Execute();
编辑为什么使用 LINQ 而非 SODA、Query-by-Example (QBE) 或 Native Query (NQ)?因为 LINQ 让查询表达式变得非常自然。例如,以下是您查询名为 Michael 的飞行员的方式:
var michaelPilots = from Pilot p in db
where p.Name == "Michael"
select p;
LINQ 是可组合的,这意味着您可以执行以下操作:
var first20MichaelPilots = michaelPilots.Take(20);
当您对结果进行迭代时,您仍然可以在 DB4O 中获得高效的查询。在 SODA 或 QBE 或 NQ 中做同样的事情充其量是丑陋的。