Azure表控制器 - 通过参数获取记录

时间:2017-02-26 06:36:53

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

我正在开发Azure移动应用程序项目。我必须定义一个表控制器,它可以接受两个参数并给出一个值列表。我有一个if/else if的DataObject,它是

ProductItem

我需要获取特定的产品项目,按其价格和商家进行过滤。已经在public class ProductItem : EntityData { public string Name { get; set; } public string Details { get; set; } public double Price { get; set; } public string Image { get; set; } public Merchant Merchant { get; set; } } ,我有脚手架

ProductItemContoller

通过查看现有的例子。但是在示例中,我们没有从客户端调用任何给定的方法。相反,// GET tables/ProductItem public IQueryable<ProductItem> GetAllProductItems() { return Query(); } // GET tables/ProductItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 public SingleResult<ProductItem> GetProductItem(string id) { return Lookup(id); } 被调用。

我的问题是为什么我们不能将已经在控制器中定义的IEnumerable<ProductItem> items = await productTable.ToEnumerableAsync();称为客户端。如果我们可以打电话,怎么做。

而且,我需要一个控制器方法,我需要一个GetAllProductItems()。我怎样才能做到这一点。

2 个答案:

答案 0 :(得分:1)

表控制器由客户端SDK代表您自动调用,允许您在客户端上使用LINQ查询。你可以使用类似的东西:

var items = productTable.Where(p => p.Price < 100).ToListAsync();

这将被转换为跨线程的OData查询,然后转换回服务器上的LINQ查询,然后在该查询中将其转换为SQL并在SQL Azure实例上执行。

有关详细信息,请参阅http://aka.ms/zumobook

的第3章

答案 1 :(得分:0)

你的意思是?

// Server method:
[HttpGet]
[Route("GetAllProductItems")]
public IQueryable<ProductItem> GetAllProductItems()
{
    return Query();
}

// Client call
var result = await MobileService.InvokeApiAsync<IQueryable<ProductItem>>("ProductItem/GetAllProductItems", HttpMethod.Get, null);

请记住在ProductItemController之前添加这些属性:

[MobileAppController]
[RoutePrefix("api/ProductItem")]

您可以对GetAllProductByMerchat(string merchantId)方法执行相同的操作。