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();

出てくるデータを見ると、最初の 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 が正しく機能していないように見える理由がわかりません。

4

3 に答える 3

5

の最初の 3 文字で並べ替えていrowkeyます。4 文字ではありません。4 文字を使用するには、次のようにします。

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

Substringの 2 番目のパラメーターはlengthindex ではなく、コードが実行しようとしていることだと思います。現在の状態のコードは、最初の 3 文字に基づいて並べ替えられています。変化する:

.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) に変更します。2 番目のパラメーターは、インデックスではなく長さを指定します

于 2012-06-15T04:50:01.627 に答える