1

John Papa による優れた CodeCamper SPA にページングを実装しました。そうしているうちに、take() 関数と skip() 関数を使用しているときに奇妙なことがわかりました。

2 つのレコードをスキップして 2 を取得する次の ODATA クエリを検討してください。

/api/Breeze/Sessions?$orderby=TimeSlotId%2CLevel%2CSpeaker%2FFirstName&$skip=2&$top=2&$select=Id&$inlinecount=allpages

これは以下を返します:

[{"$id":"1","$type":" IB _pMnaszsw5zIeP0Q7Dam12XmjGGg[[System.Int32, mscorlib]], IB _pMnaszsw5zIeP0Q7Dam12XmjGGg_IdeaBlade","Id":3},{"$id":"2", "$type":" IB _pMnaszsw5zIeP0Q7Dam12XmjGGg[[System.Int32, mscorlib]], IB _pMnaszsw5zIeP0Q7Dam12XmjGGg_IdeaBlade","Id":14}]

ここで、4 つのレコードをスキップして 2 つ取得します (次のページに移動するかのように)

/api/Breeze/Sessions?$orderby=TimeSlotId%2CLevel%2CSpeaker%2FFirstName&$skip=4&$top=2&$select=Id&$inlinecount=allpages

これは以下を返します:

[{"$id":"1","$type":" IB _pMnaszsw5zIeP0Q7Dam12XmjGGg[[System.Int32, mscorlib]], IB _pMnaszsw5zIeP0Q7Dam12XmjGGg_IdeaBlade","Id":14},{"$id":"2", "$type":" IB _pMnaszsw5zIeP0Q7Dam12XmjGGg[[System.Int32, mscorlib]], IB _pMnaszsw5zIeP0Q7Dam12XmjGGg_IdeaBlade","Id":11}]

ID 14 のレコードを 2 回取得しています。この問題は、任意の数のページまたはレコードで再現できます。

何が起こっているのですか?

[編集]

わかりました、orderby ($orderby=TimeSlotId%2CLevel%2CSpeaker%2FFirstName&) を取り除けば、すべて問題ないことに気付きました。orderby が問題を引き起こしているのはなぜですか?

4

1 に答える 1