在我的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
没有完全按照它应该做到的?
答案 0 :(得分:7)
如果您使用索引,则需要为Order属性设置sortoptions。 来自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值是String。适用于所有数字类型的值(字节,双精度,浮点数,整数,长整数和短整数)。