我有一个Azure移动Easy Table Xamarin应用程序,它是一堆列表,为我自己提醒。它可以正常添加,更新和删除。我希望能够获得软删除项目的列表,以便我可以取消删除一些将它们添加回列表而无需重新输入。我无法弄清楚如何做到这一点。我在谷歌搜索中看到一个IncludeDeleted属性,但它似乎不适用于我正在使用的IMobileServiceSyncTable表。这是代码,但它检索零记录。如果我在LinqPad 5中运行它,我将获得所有软删除的记录。
...
@yield('content')
</div>
{{-- Scripts --}}
<script src="{{ asset('theme/js/jquery-3.1.1.min.js') }}"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="{{ asset('theme/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('js/app.js') }}"></script>
<script src="{{asset('theme/js/select2.min.js')}}"></script>
@yield('footer_scripts')
</body>
这是班级:
public async Task<IEnumerable<ListData>> GetDeletedItemsAsync()
{
await InitializeClient();
await SyncItems();
try
{
IEnumerable<ListData> items = await listdata
.Where(listdata => listdata.Deleted == true )
.ToEnumerableAsync();
return new ObservableCollection<ListData>(items);
}
catch (MobileServiceInvalidOperationException msioe)
{
Debug.WriteLine(@"Invalid sync operation: {0}", msioe.Message);
}
catch (Exception e)
{
Debug.WriteLine(@"Sync error: {0}", e.Message);
}
return null;
}
我错过了什么?感谢。
答案 0 :(得分:0)
根据我的理解,您可以尝试更改SyncItems
方法,如下所示:
private async Task SyncItems()
{
var queryName = $"incsync:s:{typeof(ListData).Name}";
var query = listDataTable.CreateQuery().IncludeDeleted();
await listDataTable.PullAsync(queryName, query);
}
您可以在调用上述方法时使用fiddler捕获网络跟踪,然后您可以检查响应并查找是否可以检索已删除的项目。
然后,您可以利用DB Browser for SQLite或任何其他工具检查本地SQLite数据库并验证您的表记录以缩小此问题。
答案 1 :(得分:0)
执行此操作的方法是使用IMobileServiceTable对象直接转到服务器。这很简单。然后,您可以在查询中使用IncludeDeleted指令。案件解决了。