2010-04-27 37 views
2

这是一个古怪的问题,我想。我可以将NHibernate的默认“OrderBy”设置为“CreatedDate”而不是“Id”吗?

除非我在HQL或Criteria中设置OrderBy,否则我可以通过默认方式让NHibernate要求SQL通过CreatedDate对数据进行排序吗?我很想知道这种排序是否可以在数据库级完成,以避免引入LINQ。

的原因是,我使用的GUID对于IDS,当我做这样的事情:

Sheet sheet = sheetRepository.Get(_someGUID); 
IList<SheetLineItems> lineItems = sheet.LineItems; 

来获取所有了LineItem的,他们回来的任何武断的方式,SQL排序,取指,这是我图是GUID。在某些时候,我会将序号添加到我的订单项中,但现在,我只想使用CreatedDate作为排序标准。我不想被迫做:

IList<SheetLineItem> lineItems = sheetLineItemRepository.GetAll(_sheetGUID); 

然后写这个方法来按照CreatedDate进行排序。我想如果一切都按默认排序在CreatedDate上,那很好,除非特别要求否则。

+0

丹尼尔Renshaw(作为另一个问题的答案的一部分)建议在这里使用NHibernate包装上的order-by属性(http://stackoverflow.com/questions/2723774/for-sql-select-returning-more-than-1 - 值 - 如何 - 都 - 它们排序,当-ID-是全局唯一标识符)。我认为这是恰当的,所以我想我会留在这里让其他人阅读为可能的解决方案。 – 2010-04-27 19:17:43

回答

1

你并不需要写一个方法来进行排序,只需使用LINQ的排序依据扩展方法:

sheetLineItemRepository.GetAll(_sheetGUID).OrderBy(x => x.CreatedDate); 

你可以把一个聚集索引上CreatedDate在数据库中,那么你可能会得到记录按照这个顺序,但你绝对不应该依赖它。

+0

或'IEnumerable lineItems = sheet.LineItems.OrderBy(x => x.CreatedDate);' – 2010-04-27 15:40:34

+0

@Mark我也想到了LINQ技术,只是希望避免使用它并让DB去做为了我。 @Martinho是的,我实际上正在做你现在写的东西,但是我认为我应该问社区是否有更好的方式让DB去为我做。 – 2010-04-27 15:41:31

+0

@Chris:你可以在问题中更明确地说明这个部分(可以/应该由DB/NHibernate为我做?)。我会对答案感兴趣。 – 2010-04-27 15:45:11

相关问题