我正在开发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()
。我怎样才能做到这一点。
答案 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)
方法执行相同的操作。