【问题标题】:Retrieve Data from Windows Azure Storage从 Windows Azure 存储中检索数据
【发布时间】:2013-07-04 19:22:09
【问题描述】:

如何查询我的 Windows Azure 存储,例如:

(SELECT Name FROM User WEHRE DeviceID = App.Current.DeviceID)  

试过了,好像没用

var Name = await App.MobileService.GetTable<User>()
    .Select(User => User.Name)
    .Where(User => User.DeviceID == App.Current.DeviceID); 

但是我可以根据id查询表

 var Name = await App.MobileService.GetTable<User>().LookupAsync(id);

是否有类似的方法可以根据字符串(例如电话设备ID)而不是整数ID来查询表?

用户类

public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string DeviceID { get; set; }
    }

【问题讨论】:

  • 你能对 LinqQuery 进行字符串化吗?我相信这是在下面找到 OData 查询的最简单方法。由于 SQL azure 不适用,我将重新标记此 OData。
  • ToString 是什么意思?我想要做的是根据设备ID从用户表中选择名称。但是现在,查找异步仅适用于整数 id,我不知道另一种基于字符串检索数据的方法
  • 在低级别,Azure 存储使用 REST 命令工作。我应该改述一下,您没有使用 Linq,但 SDK 正在将它们转换为 REST 字符串。为了帮助调试您的解决方案,请寻找一种允许您在链末尾输出字符串 (.ToString()) 或 (.ToAzureString()) 的方法。

标签: c# windows-phone-8 odata azure-storage azure-mobile-services


【解决方案1】:

Where 方法的结果仍然是一个查询 对象,它还不是对象本身。您需要调用ToListAsyncToEnumerableAsync 之一来实际提出请求:

var Name = (await App.MobileService.GetTable<User>()
    .Where(User => User.DeviceID == App.Current.DeviceID)
    .Select(User => User.Name)
    .ToEnumerableAsync()).FirstOrDefault();

【讨论】:

  • 我试过你的方法但是User.DeviceID有错误,它说字符串不包含DeviceID的定义并且找不到扩展方法DeviceID
  • 我对语句的顺序有疑问,现在已修复。 Where 子句应位于 Select 之前。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 2018-08-03
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
相关资源
最近更新 更多