2017-02-26 37 views
0

我正在开发Azure移动应用程序项目。在那里我必须定义一个Table Controller,它可以接受两个参数并给出一个值列表。我有一个ProductItem数据对象,这是Azure表控制器 - 通过参数获取记录

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); 
} 

通过查看现有的例子。但是在例子中,我们没有调用Client的任何给定方法。相反,IEnumerable<ProductItem> items = await productTable.ToEnumerableAsync();被调用。

我的问题是为什么我们不能将控制器中已经定义的GetAllProductItems()称为客户端。如果我们可以打电话,该怎么做。

而且,我需要一个控制器方法,我需要一个GetAllProductByMerchat(string merchantId)。我怎样才能使这成为可能。

回答

1

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

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

这被转换为跨线的OData的查询,然后再翻译回服务器,它然后被转换为SQL,并在SQL Azure的实例上执行LINQ查询。

欲了解更多信息,请参阅第3章http://aka.ms/zumobook

+0

不能我有一个服务器驻留逻辑来计算的东西。我需要遵循厚实的服务器 - 瘦客户机的概念。是不是有可能与TableControllers? –

+0

当然可以 - 查看http://aka.ms/zumobook - 第3章 - 了解详情。 –

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)方法。

+0

嗨,我的问题是为TableControllers。但是您的方法似乎适用于API控制器。不是吗。如果Iam错误,请纠正我的错误 –

+0

如果要通过名称调用客户端的服务器方法,请使用API​​控制器。 –