私はこのコードを持っています:
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();
出てくるデータを見ると、最初の 2 行で次のことがわかります。
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 は正しい順序ではないようです。
行キーの最初の 4 文字をソートしてから、ShortTitle をソートすることになっています。
これが機能しない理由を誰でも見ることができます。私はよく見ましたが、OrderBy と ThenBy が正しく機能していないように見える理由がわかりません。