【问题标题】:Azure Mobile App offline sync: Working with IMobileServiceSyncTable using LINQAzure 移动应用脱机同步:使用 LINQ 处理 IMobileServiceSyncTable
【发布时间】:2017-11-15 11:53:44
【问题描述】:

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

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

但是在使用IMobileServiceSyncTable 时,我没有得到LINQ 方法或CountDistinctFirstOrDefault 等扩展。我得到的只是IMobileServiceSyncTable 提供的一组方法/属性。

我在这里遗漏了什么,如果没有,请指导我如何实现这一点。

下面是代码sn-p。我正在尝试获取图像标题与“sometext”匹配的图像数量:

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

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

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

【问题讨论】:

  • 能否在使用同步表的地方添加代码 sn-p 并创建查询?谢谢
  • @woelliJ 添加了代码 sn-p。

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


【解决方案1】:

是的,由它创建的 IMobileServiceSyncTableIMobileServiceTableQuery 不支持 LINQ 扩展。主要功能在WhereToListAsync 中。

如果您想要 LINQ 查询,您可以尝试使用 IMobileServiceTableQuery&lt;T&gt;.Query 属性,该属性公开了 IQueryable&lt;T&gt; 接口。我没有亲自尝试过,不确定您是否可以直接在该可查询对象上调用FirstOrDefaultToList,或者您需要返回IMobileServiceTableQuery&lt;T&gt;

它似乎是为以下场景设计的:

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

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

【讨论】:

  • 我试过下面的代码:IMobileServiceTableQuery&lt;Image&gt; query = entitySyncTable.CreateQuery().Where(i =&gt; i.Title.Contains("sometext")).Count();,如果这是你所指的,它也有同样的问题Query不暴露LINQ
  • CreateQuery() 之后,您可以获得Query 属性并在那里尝试LINQ。我不确定它是否会起作用。如果您当前的 Where 子句不起作用,则很可能是因为 string.Contains 未使用 SQLite 存储实现
  • 当时可能不支持。如果不是太多数据,您可以使用ToListAsync 实现结果并计算它们
猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多