我有这段代码:
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似乎无法正常工作。
答案 0 :(得分:5)
您按rowkey
的前3个字符排序,而不是4个。要使用4个字符,请执行以下操作:
.OrderBy(item => item.RowKey.Substring(0, 4))
答案 1 :(得分:2)
Substring
的第二个参数是length
,而不是索引,我认为这是您的代码尝试执行的操作。处于当前状态的代码基于前三个字符进行排序。变化:
.OrderBy(item => item.RowKey.Substring(0, 3))
到
.OrderBy(item => item.RowKey.Substring(0, 4))
答案 2 :(得分:1)
如果要获得4个字符,请将子字符串更改为Substring(0,4)。第二个参数指定长度而不是索引