我有具有DateTime属性的对象,如何查询最旧的对象?
在db4o论坛上询问后,我得到了答案:
这很简单:创建一个排序SODA-Query and
从生成的ObjectSet
中获取第一个/最后一个对象。不要迭代ObjectSet
(因此不会激活对象),只需通过#ObjectSet.Get(index)
直接获取所需对象。
请注意:db4o在查询执行中仅支持一组有限的高性能排序(字母,数字,对象ID),因此您可能必须将DateTime存储为毫秒才能获得良好的性能。
答案 0 :(得分:1)
首先,您的对象需要跟踪时间本身,因此这取决于您的要求:
class Customer
{
public DateTime DateSignedUp {get; private set;}
// ...
}
现在,您可以使用Linq,SODA或Native Queries以您喜欢的任何方式查询对象,例如。
IObjectContainer container = ...;
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First();
然而,存在一系列陷阱:
DateTime
。我遇到了很多问题。我无法重现问题所以我还无法报告,但我个人不建议使用它们。请改用long
并复制相应DateTime
的刻度。以UTC格式存储所有时间,除非您明确提及当地时间,例如公交时刻表。where
约束,因为这样会很快。 See also my blogpost关于性能问题,在~50-100k对象上已经变得非常烦人。最佳,
克里斯