entitySelection.slice( ) メソッドはstartFrom 引数のインデックスからend 引数のインデックスまで(end は含まれません)で選択されたエンティティセレクションの一部を、新しいエンティティセレクションへと入れて返します。このメソッドはエンティティセレクションのシャロウ・コピーを返します(同じエンティティ参照を使用します)。
注: このメソッドは元のエンティティセレクションは書き換えません。
返されたエンティティセレクションはstartFrom 引数で指定された位置以降から、end 引数で指定された位置までの全てのエンティティを格納しています(ただしend の位置は含まれません)。startFrom 引数のみが指定された場合、返されたエンティティセレクションには、元のエンティティセレクションのstartFrom 引数の位置から最後のエンティティまでの全てのエンティティが格納されています。
- startFrom 引数が負の値の場合、startFrom:=startFrom+length として再計算されます(エンティティセレクションの終端からのオフセットであるとみなされます)。計算された値も負の値であった場合、startFrom は0 に設定されます。
- startFrom 引数がlength と同じかそれより大きい場合、メソッドは空のエンティティセレクションを返します。
- end 引数が負の値の場合、end:=end+length として再計算されます。
- end < startFrom (渡した値あるいは計算された値)であった場合、メソッドは何もしません。
エンティティセレクションにドロップされたエンティティが含まれる場合、それらも返されます。
エンティティセレクションの、最初の9個のエンティティのセレクションを取得したい場合を考えます:
C_OBJECT($sel;$sliced)
$sel:=ds.Employee.query("salary > :1";50000)
$sliced:=$sel.slice(0;9)
ds.Employee.all().length = 10である場合を考えます:
C_OBJECT($slice)
$slice:=ds.Employee.all().slice(-1;-2)