c# - Xamarin Forms 拉取异步表。CreateQuery() 默认添加了 OFFSET

标签 c# azure xamarin.forms synchronization

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

我在 Xamarin Forms 中对 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 并在 node.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 如何在 table.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; }
    }

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

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

关于c# - Xamarin Forms 拉取异步表。CreateQuery() 默认添加了 OFFSET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51861911/

相关文章:

c# - 按名称将一种枚举类型转换为另一种枚举类型

c# - 在线程中执行 Webbrowser 控件的屏幕显示

c# - 如何在 ASP.NET MVC 客户端自定义超链接

android - 以xamarin形式在 ListView 内随机触发的条目控制焦点取消焦点事件

c# - 套接字异常 : "access denied" while opening port using UdpClient

c# - MVC4 - 在 DropDownList 中设置初始选定的项目

azure - 如何为 azure 2.5 sdk Web 角色诊断指定 UseDevelopmentStorage=true

powershell - Login-AzureRmAccount 返回订阅,但 Get-AzureSubscription 返回空

azure - Azure BizSpark 费用会自动支付吗

android - 尝试将 OneSignal 集成到 Xamarin.Forms Android 应用程序时出错