合并Azure移动服务中的多个表

时间:2013-12-10 10:06:32

标签: sql-server json azure azure-mobile-services

在C#中编写Web服务时,我们创建对象然后序列化并将其发送到客户端。我想做一些类似于Azure移动服务的东西

我有2张桌子

  1. OrderHead
  2. OrderRow
  3. Orderhead有订单信息(totalprice,customerid,创建日期等),OrderHead表中的一条记录可以在OrderRow中有多个项目。 Orderrow表包含有关订购商品的详细信息(订购商品,商品名称,价格等)

    如何将它们连接在一起并从自定义API获得单个响应。类似于下面的东西

    {
        "orderheadid": "3424232",
        "totalprice": 423423,
        "orderrow": [
            {
                "itemid": "32423",
                "itemprice": 2
            },
            {
                "itemid": "23",
                "itemprice": 333
            },
            {
                "itemid": "223",
                "itemprice": 4
            }
        ]
    }
    

    或者我应该从客户端站点单独调用每项服务?

    我知道我可以使用mssql对象进行INNER JOIN查询,但是它不会返回上面给出的结构化JSON对象。请有人赐教。

    感谢您提前的时间

1 个答案:

答案 0 :(得分:0)

  1. 从表1中检索值并将其分配给变量
  2. 从表2中检索值,并将其作为新属性添加到上面创建的变量中。
  3. 如下所示

    var orderHead;
    var orderRow;
    var orderRowTable  = table.getTable('orderhead');
    orderHeadTable.where({
    //any other query details
        customerid:request.user.userId
        }).read({
            success:function(result){
                console.log(result.length);
                if(result.length===0){
                    response.send(400, { message : 'Cart empty' });
                }else{
                    orderHead = result[0];
                    getOrderRows()
                }
            },
            error:function(){
                response.send(400, { message : 'error while reading order information' });
            }
        });
    
    function getOrderRows(){
         var orderRowTable  = table.getTable('orderrow');
        orderRowTable.where({
            orderheadid:orderHead.id
        }).read({
           success:function(result){
               if(result && result.length===0){
                   response.send(400, { message : 'Cart empty' });
               }else{
                    orderRows = result;
                    orderHead.orderRows = orderRows;
                    response.send(200, orderHead);        
               }
           },
           error:function(){
               response.send(400, { message : 'error while reading order information - row' });
           } 
        });
    }