我有具有 DateTime 属性的对象,我如何查询最旧的对象?
在 db4o 论坛上询问后,我得到了答案:
这很容易:SODA-Query and
从结果中创建一个排序的第一个/最后一个对象ObjectSet
。不要迭代ObjectSet
(因此不会激活对象),只需通过#ObjectSet.Get(index)
.
请注意:db4o 在查询执行中仅支持一组有限的性能排序(字母、数字、对象 ID),因此您可能必须将 DateTime 存储为毫秒才能获得良好的性能。
首先,您的对象需要跟踪时间本身,因此这取决于您的要求:
class Customer
{
public DateTime DateSignedUp {get; private set;}
// ...
}
现在,您可以使用 Linq、SODA 或本机查询以任何您喜欢的方式查询对象,例如
IObjectContainer container = ...;
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First();
但是,有一组陷阱:
DateTime
在您的持久对象中使用。我和他们有很大的问题。我无法重现这个问题,所以我还不能报告它,但我个人不建议使用它们。改用 along
并从相应的DateTime
. 以 UTC 存储所有时间,除非您明确指的是当地时间,例如在公交车时刻表的情况下。where
约束,因为这样会很快。另请参阅我关于该性能问题的博文,在大约 50-100k 个对象上已经变得非常烦人。最好的,
克里斯