2017-02-26 38 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​​控制器。 –