You can try this:
<Method Name="GetItems" LobName="GetItems" IsStatic="false">
<FilterDescriptors>
<FilterDescriptor Name="BatchingStateCookie" Type="Batching">
<Properties>
<Property Name="BatchingCookie" Type="System.String">Cookie</Property>
</Properties>
</FilterDescriptor>
<FilterDescriptor Name="HasMoreBatches" Type="BatchingTermination">
<Properties>
<Property Name="CaseSensitive" Type="System.Boolean">false</Property>
<Property Name="Comparator" Type="System.String">!=</Property>
<Property Name="TerminationValue" Type="System.String">true</Property>
</Properties>
</FilterDescriptor>
</FilterDescriptors>
<Parameters>
<Parameter Name="cookie" Direction="InOut">
<TypeDescriptor Name="cookieTypeDescriptor" TypeName="System.String" AssociatedFilter="BatchingStateCookie"/>
</Parameter>
<Parameter Name="hasmore" Direction="Out">
<TypeDescriptor Name="hasmoreTypeDescriptor" TypeName="System.String" AssociatedFilter="HasMoreBatches"/>
</Parameter>
and in .NET:
int batch_size = 1000;
public MyItem[] GetItems(ref string cookie, out string hasmore)
{
if (cookie == null) {
// we are in first batch
// do some initialization if needed
}
MyItem[] items = new MyItem[batch_size];
;
hasmore = GetItemsFromDatabase(cookie, items) > 0 ? "true" : "false";
cookie = items[0].Id; // or something else you need to determine what to bring in the next batch
return items;
}