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 が問題を引き起こしているのはなぜですか?