Windows Azure移动服务查询表

时间:2013-02-13 14:32:52

标签: c# .net xamarin azure-mobile-services

我使用的是Windows Azure移动服务。 我有一张Element表。 我想查询云数据库:

  • 选择ID,名称 FROM Element ORDER BY creationTime

但我完全不了解Windows Azure Mobile Service的“查询”系统。 我有一个IMobileServiceTable但不知道该怎么做......

我检查了教程,他们解释了如何使用Where子句,但没有选择。我需要只选择一些列,因为我的元素有图片,我不想在我的getAll方法中下载....

编辑:

我试试:

Task.Factory.StartNew(() =>
{
    var query = table.Select(x =>
                new Element()
                {
                    Id = x.Id,
                    Name = x.Name,
                    Price = x.Price
                });
    var _items = query.ToListAsync().Result;
}).ContinueWith((x) => handleProductsArrived(x.Result));

但它不起作用。

3 个答案:

答案 0 :(得分:1)

您可以在Carlos中找到一条有用的帖子,其中包含相应的SQL查询内容:http://blogs.msdn.com/b/carlosfigueira/archive/2012/09/21/playing-with-the-query-object-in-read-operations-on-azure-mobile-services.aspx

例如:

function read(query, user, request) {
query.where({ UserId: user.userId })
     .select('id', 'MovieName', 'MovieRating')
     .orderBy('MovieName')
     .take(10);
request.execute();
}

woudld翻译为

SELECT TOP 10 [id],[MovieName],[MovieRating] 来自MovieRating 评分> 2 AND UserId =? 按电影名称排序

因此,对于您需要翻译的情况

SELECT Id,Name 来自元素 ORDER BY creationTime

你会选择以下内容:

function read(query, user, request) {
    query.where({ UserId: user.userId })
        .select('id', 'Name', 'Element')
        .orderBy('creationTime')
    request.execute();
}

答案 1 :(得分:1)

听起来您只是想用IMobileServiceTable

进行简单的查询
SELECT Id, Name FROM Element ORDER BY creationTime

如果您不介意使用IMobileServiceTable<TodoItem>,可以尝试:

1)从对象中删除不需要的成员属性

示例:

public class TodoItem
{
    public int Id { get; set; }

    // REMOVE WHAT YOU DO NOT WANT
    //[DataMember(Name = "text")]
    //public string Text { get; set; }

    [DataMember(Name = "complete")]
    public bool Complete { get; set; }
}

2)这是读取数据的代码:

private void RefreshTodoItems()
{ 
    items = todoTable
            .OrderBy( todoItem => todoItem.Id )
            .Take(10)
            .ToCollectionView();
    ListItems.ItemsSource = items;
}

基本上是:

SELECT TOP 10 Id, Complete FROM TodoTable ORDER BY Id

todoTable的代码示例位于http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-wp8/

希望这有帮助。

答案 2 :(得分:0)

如果您正在使用.net,那么您几乎可以关注linq。 查看示例应用程序 - 它所在的位置 -

    private void RefreshTodoItems()
    {
        // This code refreshes the entries in the list view be querying the TodoItems table.
        // The query excludes completed TodoItems
        items = todoTable
            .Where(todoItem => todoItem.Complete == false)
            .ToCollectionView();
        ListItems.ItemsSource = items;
    }

例如,如果您不想返回完整标记,则可以在调用.ToCollectionView()之前添加

.Select(item=>new {item.Id, item.Text})

这将创建一个匿名类型的新对象列表(可以是具体类型),并指定两个成员。