3

在我的 C# 应用程序中,我有一个int Order属性范围从 1 到n的对象集合。

当我这样做时:

var listings = session.Query<Listing>().Where(x => !x.IsDeleted && x.CategoryId == category.Id && x.WorkflowStatus == WorkflowStatus.Published).OrderBy(x => x.Order);

我得到了一系列列表,但不是 100% 以正确的顺序排列。按照目前的顺序:

0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 28, 29, 3, 30, 31, 32, 33, 4 .... 

知道为什么OrderBy不完全按照它应该做的吗?

4

1 回答 1

8

如果您使用的是索引,则需要为 Order 属性设置排序选项。来自http://ravendb.net/docs/client-api/querying/static-indexes/customizing-results-order

另一方面,数值存储为文本,因此需要用户明确指定使用的数字类型,以便强制执行正确的排序机制。这很容易做到,通过在索引定义的 SortOptions 中声明所需的排序设置:

Sort(x => x.Order, SortOptions.Int);

上面列出的索引将允许按用户年龄(1、2、3、11 等)的值进行排序。如果我们不指定此选项,它将按词法排序(1、11、2、3 等)。默认的 SortOptions 值为字符串。适用于所有数字类型(Byte、Double、Float、Int、Long 和 Short)的值。

于 2013-06-05T10:52:54.073 回答