Azure移动应用程序脱机同步:使用LINQ

时间:2017-06-13 15:38:49

标签: c# linq sqlite uwp azure-mobile-services

我正在构建一个UWP应用程序,它使用SQLite数据库在本地存储数据,Azure Mobile App Backend启用离线同步功能。 我已按照documentation在我的应用中启用了离线同步功能。 现在我想执行一个查询,它会根据特定条件返回表中的行数 通常,我可以使用LINQ轻松做这样的事情

todoTable.Where(item => item.Completed == true).Count()

但在使用IMobileServiceSyncTable时,我没有获得LINQ方法或扩展程序,例如CountDistinctFirstOrDefault等。我得到的只是集合由IMobileServiceSyncTable提供的方法/属性。

enter image description here

我在这里遗漏了一些东西,如果没有,有人可以指导我如何实现这一目标。

以下是代码段。我试图得到图像标题匹配“sometext”的图像数:

IMobileServiceSyncTable<Image> entitySyncTable = AzureBackendService.MobileServiceClient.GetSyncTable<Image>();
int count = entitySyncTable.Where(i => i.Title.Contains("sometext")).Count();

但是我在Count()上收到了以下错误:

  

'IMobileServiceTableQuery'不包含'Count'的定义,并且没有扩展方法'Count'接受类型为'IMobileServiceTableQuery'的第一个参数'(您是否缺少using指令或程序集引用?)

1 个答案:

答案 0 :(得分:1)

是的,从它创建的IMobileServiceSyncTableIMobileServiceTableQuery不支持LINQ扩展。主要功能位于WhereToListAsync

如果您想要LINQ查询,可以尝试使用公开IMobileServiceTableQuery<T>.Query接口的IQueryable<T>属性。我没有亲自尝试过,也不确定您是否可以直接在该查询中致电FirstOrDefaultToList,或者您需要返回IMobileServiceTableQuery<T>

它似乎设计的场景是:

  • 任何类型的用户特定项目,其中用户项目已在服务器上过滤,仅返回用户的项目。
  • 所有用户的瞬态数据,可以定期更新,最终会失去价值并可以清除

如果应用程序需要在本地拥有大量服务器数据并且需要进行大量本地过滤,则可能是错误的技术/设计。