Xamarin 窗体拉取异步表.默认情况下,CreateQuery() 添加了 OFFSET 功能



>想知道以前是否有人看过这个,如果是的话,他们是如何排序的

我在 Xamarin 窗体中对 Azure 数据进行拉取异步

if (!CrossConnectivity.Current.IsConnected) { return; }
table = Client.GetSyncTable<T>();
var pullOptions = new PullOptions() { MaxPageSize = 100 };
IMobileServiceTableQuery<T> query = table.CreateQuery();
if(Client.SyncContext.IsInitialized)
await table.PullAsync("qryAllEvents", query, pullOptions);

我知道这应该带回 5 条记录。

在检查 Sql Profiler 并将断点放在节点.js后端时,我可以看到运行了 2 个查询,一个使用 OFFSET 0,另一个使用 OFFSET 5,因此它删除了所有 5 条记录。

SELECT * FROM [dbo].[Events] WHERE ([updatedAt] >= @p1) ORDER BY [updatedAt] OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY; ',@params=N'@p1 datetimeoffset(7)',@p1='1970-01-01 00:00:00 +00:00'

SELECT * FROM [dbo].[Events] WHERE ([updatedAt] >= @p1) ORDER BY [updatedAt] OFFSET 5 ROWS FETCH NEXT 50 ROWS ONLY; ',@params=N'@p1 datetimeoffset(7)',@p1='1970-01-01 00:00:00 +00:00'

这个 OFFSET 如何最终出现在由table.CreateQuery()生成的查询中,有什么方法可以防止这种情况,以便我返回我的行?

这个 OFFSET 如何最终出现在由表生成的查询中。CreateQuery((...?

SDK 将偏移量设置为等于拉取光标位置。

取自 GitHub。

if (offset.HasValue)
{
this.sql.AppendFormat(" OFFSET {0}", offset.Value);
}

也取自GitHub。

internal class PullCursor
{
public int Position
{
get { return this.initialSkip + this.totalRead; }
}

。有什么方法可以防止这种情况,以便返回我的行?

您的第一个查询在没有偏移量 (游标。位置为 0(,然后 SDK 将偏移量增加总读取量。SDK 正在增加总读取量的事实告诉我,您正在返回行。我认为当SDK收到结果并保存到本地存储时出现问题。这是一个与您类似的 SO 问题。一个回复建议启用 SQLite 日志记录以获取更多信息,并解释了两次 API 调用的原因。

最新更新