2016-11-08 60 views
0

示意圖中,我花時間做下面的事情。Azure移動應用程序離線同步 - 網址長度限制,批量提取,查詢ID長度

public async Task<ItemA> GetItemsA(object someParams) 
{ 
    var res = new List<ItemA>(); 
    var listOfItemAIds = await GetIdsFromServerAsync(someParams); 
    var tableAQuery = _tableA.Where(x => listOfItemAIds.Contains(x.Id)); 
    await _tableA.PullAsync(null, tableAQuery); 
    var itemsA= await tableAQuery.ToListAsync(); 
    var listOfItemBIds = itemsA.Select(x => x.bId).ToList(); 
    await _tableB.PullAsync(null, _tableB.Where(x => listOfItemBIds .Contains(x.Id)); 
    foreach(var itemA in itemsA) 
    { 
     itemA.ItemB = await _tableB.LookupAsync(itemA.itemBId); 
    } 
    return res; 
} 


有幾個問題是:

  • listOfTableAIds.Contains(x.Id)導致錯誤的發生是由於URL長度限制
  • 作爲不能少於50的queryId代表listOfItemAIdslistOfItemBIds內容字符,我最終拉我可能已經有的數據
  • 這是一個遺憾的是,我所有的拉沒有批量到一個單一的服務器調用
  • 我可以直接得到所有我從一個單一的服務器查詢的需要,但後來我也不會從Azure的手機同步框架

,關於如何提高該序列任何建議中受益?

回答

0

我建議你改進一下,讓你的查詢更簡單。你可能總體拉動更多的數據,但是那些數據將在tableB中可用。例如,你可能想說「where itemBId不爲null」。

+0

謝謝你看看@adrian。然而,我不能讓它變得「更簡單」,因此我的帖子。我將最終重定向pullasync http進入自定義http帖子... –