C# 如何从db4o查询最早的对象?
我有具有DateTime属性的对象,如何查询最早的对象 在db4o论坛上提问后,我得到了答案: 这非常简单:创建一个排序的C# 如何从db4o查询最早的对象?,c#,db4o,C#,Db4o,我有具有DateTime属性的对象,如何查询最早的对象 在db4o论坛上提问后,我得到了答案: 这非常简单:创建一个排序的SODA查询,并从结果ObjectSet中获取第一个/最后一个对象。不要迭代对象集(因此对象不会被激活),只需通过#ObjectSet.Get(index)直接获取所需的对象即可 请注意:db4o在查询执行中只支持一组有限的性能排序(字母、数字、对象ID),因此您可能必须将DateTime存储为毫秒以获得良好的性能 首先,您的对象需要跟踪时间本身,因此它取决于您的需求: cl
SODA查询,并从结果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();
IObjectContainer=。。。;
Customer oldestCustomer=container.Query().OrderBy(p=>p.DateSignedUp.First();
但是,存在一系列陷阱:
不要在持久化对象中使用DateTime
。我和他们有很多问题。我不能重现这个问题,所以我还不能报告它,但我个人不建议使用它们。改为使用long
,并从相应的DateTime
复制刻度。将所有时间存储为UTC,除非您明确指的是当地时间,例如在公交车时刻表的情况下
对时间进行索引
对于大量的对象,订单操作可能会非常非常慢,因为。如果您有大量对象,并且您知道对象的大致年龄,请尝试在其中施加约束,因为这样会很快。关于性能问题,在大约50-100k的对象上,这可能会变得非常恼人
最佳,
Chris首先,您的对象需要跟踪时间本身,因此它取决于您的要求:
class Customer
{
public DateTime DateSignedUp {get; private set;}
// ...
}
现在,您可以使用Linq、SODA或本机查询以任何方式查询对象,例如
IObjectContainer container = ...;
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First();
IObjectContainer=。。。;
Customer oldestCustomer=container.Query().OrderBy(p=>p.DateSignedUp.First();
但是,存在一系列陷阱:
不要在持久化对象中使用DateTime
。我和他们有很多问题。我不能重现这个问题,所以我还不能报告它,但我个人不建议使用它们。改为使用long
,并从相应的DateTime
复制刻度。将所有时间存储为UTC,除非您明确指的是当地时间,例如在公交车时刻表的情况下
对时间进行索引
对于大量的对象,订单操作可能会非常非常慢,因为。如果您有大量对象,并且您知道对象的大致年龄,请尝试在其中施加约束,因为这样会很快。关于性能问题,在大约50-100k的对象上,这可能会变得非常恼人
最佳,
克里斯谢谢你,克里斯,很高兴知道这件事。没有在skype上看到你,我现在在twitter上关注你。谢谢,克里斯,很高兴知道这一点。没有在skype上看到你,我现在在twitter上跟踪你。