1

我有这个代码:

var query = _cityRepository.GetAll(
                              u => u.PartitionKey == pk &
                              u.RowKey.CompareTo(lowerBound) >= 0 &
                              u.RowKey.CompareTo(upperBound) < 0)
               .OrderBy(item => item.RowKey.Substring(0, 3))
               .ThenBy(item => item.ShortTitle)
               .Select((t, index) => new City.Grid()
               {
                   PartitionKey = t.PartitionKey,
                   RowKey = t.RowKey,
                   Row = index + 1,
                   ShortTitle = t.ShortTitle,
                   Created = t.Created,
                   CreatedBy = t.CreatedBy,
                   Modified = t.Modified,
                   ModifiedBy = t.ModifiedBy
               })
               .ToList();

当我查看输出的数据时,我发现前两行是这样的:

RowKey = 0101004O , ShortTitle = "Access 1"
RowKey = 0103004M , ShortTitle = "Access 2"
RowKey = 0101004K , ShortTitle = "xxx"

在测试时,我将其简化为:

        var query1 = _cityRepository.GetAll()
            .OrderBy(item => item.RowKey.Substring(0, 3))
            .ThenBy(item => item.ShortTitle);

并且顺序是一样的。RowKey 的顺序似乎仍然不正确。

它应该对 rowkey 的前四个字符进行排序,然后对 ShortTitle 进行排序。

谁能明白为什么这不起作用。我仔细看了看,但我不明白为什么 OrderBy 和 ThenBy 似乎无法正常工作。

4

3 回答 3

5

您按 的前 3 个字符排序rowkey,而不是 4 个。要使用 4 个字符,请执行以下操作:

     .OrderBy(item => item.RowKey.Substring(0, 4))
于 2012-06-15T04:48:06.480 回答
2

Substring的第二个参数是length,而不是索引,我相信这是您的代码试图做的事情。当前状态下的代码将根据前三个字符进行排序。改变:

.OrderBy(item => item.RowKey.Substring(0, 3))

.OrderBy(item => item.RowKey.Substring(0, 4))
于 2012-06-15T04:48:30.957 回答
1

如果您想获得 4 个字符,请将您的子字符串更改为 Substring(0, 4)。第二个参数指定长度而不是索引

于 2012-06-15T04:50:01.627 回答