Jon、Jared和yshuditelu所给出的答案使用的是“按示例查询”的方法,这是DB4o中很少使用的查询机制,并且在未来可能会被弃用。
在.NET上查询DB4O的首选方法是本地查询和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中进行相同操作最多只能算是丑陋的。