2017-03-16 22 views
0
我目前使用的每一個鍵下面

,我需要查詢:鑑於分區鍵列表,查找表匹配的記錄存儲

TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, itemId) 

然而,這是在數千規模笨拙成千上萬。

有什麼辦法可以通過itemIds的列表,這樣我就可以進出一次嗎?

我已經試過,但不支持Contains

IQueryable<Item> queryForItems = this.itemTable.CreateQuery<Item>().Where(s => itemIds.Contains(s.PartitionKey)); 

的思考?

+0

爲了澄清 - 你希望得到一個項目回來?如果沒有,則支持分頁;相反,如果你的'RowKey'本質上是可排序的,你可以查詢一系列的行鍵。 –

回答

1

這不支持開箱即用。你可以嘗試做的是生成一個等於過濾器的列表,然後將它們與OR條件結合起來。

事情是這樣的:

var partitions= new []{"partition1", "partition2", "partition3"}; 
var filters = partitions.Select(key => TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, key)).ToArray(); 

然後你就可以使用循環結合您的過濾器:

string finalFilter = String.Empty 
for (var i = 0; i < filters.Length; i++) 
combine = TableQuery.CombineFilters(finalFilter, TableOperators.Or, filters[i]); 
+0

任何想法支持多少條件? –

+0

@BrendanGreen,看起來像15是最大數量https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/querying-tables-and-entities – RAS