public async virtual Task<MobileServiceTableOperation> PeekAsync(long prevSequenceId, MobileServiceTableKind tableKind, IEnumerable<string> tableNames)
{
MobileServiceTableQueryDescription query = CreateQuery();
var tableKindNode = Compare(BinaryOperatorKind.Equal, "tableKind", (int)tableKind);
var sequenceNode = Compare(BinaryOperatorKind.GreaterThan, "sequence", prevSequenceId);
query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, tableKindNode, sequenceNode);
if (tableNames != null && tableNames.Any())
{
BinaryOperatorNode nameInList = tableNames.Select(t => Compare(BinaryOperatorKind.Equal, "tableName", t))
.Aggregate((first, second) => new BinaryOperatorNode(BinaryOperatorKind.Or, first, second));
query.Filter = new BinaryOperatorNode(BinaryOperatorKind.And, query.Filter, nameInList);
}
query.Ordering.Add(new OrderByNode(new MemberAccessNode(null, "sequence"), OrderByDirection.Ascending));
query.Top = 1;
JObject op = await this.store.FirstOrDefault(query);
if (op == null)
{
return null;
}
return MobileServiceTableOperation.Deserialize(op);
}