- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用简单的 TableQuery 从我的 Azure 表中获取前 n 行。但使用下面的代码,无论我对 Take 的限制如何,都会获取所有行。
我做错了什么?
int entryLimit = 5;
var table = GetFromHelperFunc();
TableQuery<MyEntity> query = new TableQuery<MyEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "MyPK"))
.Take(entryLimit);
List<FeedEntry> entryList = new List<FeedEntry>();
TableQuerySegment<FeedEntry> currentSegment = null;
while (currentSegment == null || currentSegment.ContinuationToken != null)
{
currentSegment = table.ExecuteQuerySegmented(query, this.EntryResolver, currentSegment != null ? currentSegment.ContinuationToken : null);
entryList.AddRange(currentSegment.Results);
}
Trace.WriteLine(entryList.Count) // <-- Why does this exceed my limit?
最佳答案
存储 SDK 上的 Take 方法不像在 LINQ 中那样工作。想象一下你做了这样的事情:
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
当您开始迭代结果
时,您最初只会获得 5 个项目。但在下面,如果您继续迭代结果
,SDK 将继续查询表(并继续到下一个包含 5 个项目的“页面”)。
如果我的表中有 5000 个项目,此代码将输出所有 5000 个项目(并且在 SDK 下将执行 1000 个请求并每个请求获取 5 个项目):
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
foreach (var item in result)
{
Trace.WriteLine(item.RowKey);
}
以下代码将在 1 个请求中准确获取 5 个项目并在此停止:
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
int index = 0;
foreach (var item in result)
{
Console.WriteLine(item.RowKey);
index++;
if (index == 5)
break;
}
实际上,Take() 方法设置页面大小或“占用计数”(TableQuery 上的 TakeCount 属性)。但如果您只需要 5 条记录,您仍然需要按时停止迭代。
在您的示例中,您应该修改 while 循环,使其在达到 TakeCount(通过调用 Take 设置)时停止:
while (entryList.Count < query.TakeCount && (currentSegment == null || currentSegment.ContinuationToken != null))
{
currentSegment = table.ExecuteQuerySegmented(query, currentSegment != null ? currentSegment.ContinuationToken : null);
entryList.AddRange(currentSegment.Results);
}
关于azure - 为什么 TableQuery 不支持我的 TakeLimit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452801/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我正在尝试概括一个函数,以使用 filter 过滤掉 slick 中的一些 TableQuery,因此我创建了以下方法: def fetchCoffee(coffe: String)(p: MyTab
有没有办法在 Azure 中查询与特定正则表达式匹配而不仅仅是相等的 PartitionKey? 例如: 我的 Azure 存储表分区键:CA94568、CA92122、CA92092、WA98005
有没有办法在 Azure 中查询与特定正则表达式匹配而不仅仅是相等的 PartitionKey? 例如: 我的 Azure 存储表分区键:CA94568、CA92122、CA92092、WA98005
我正在尝试找到延续 token 和 Azure 存储库 2.0 问题的明确答案,因为 2.0 之前的版本 (StorageClient) 和当前版本 (Storage) 之间似乎存在显着差异。 除了没
我想使用简单的 TableQuery 从我的 Azure 表中获取前 n 行。但使用下面的代码,无论我对 Take 的限制如何,都会获取所有行。 我做错了什么? int entryLimit = 5;
我正在尝试对我的 CloudTable 进行查询。我之前所做的是获取某个表的所有元素,但这需要很多时间。 public static List GetCollectItems(string conne
使用 Azure 存储 4.3.0 并为了使用 CloudTable.ExecuteQuerySegmentedAsync (TableQuery, TableContinuationToken)我需
我正在尝试对我的 CloudTable 进行查询。我之前所做的是获取某个表的所有元素,但这需要很多时间。 public static List GetCollectItems(string conne
在 slick 中,我有一个看起来像这样的设置: class Users(tag: Tag) extends Table(tag) { def name = column[String] de
我真的是 Slick 和 Scala 的新手,我正在努力使用 id 列表过滤查询。 productsNeededIds // = "1,2,3,4,5" - list of Ids of produc
我遇到了类似于 this 的问题 但我使用的是 scala 2.11.1、slick 3.2.0,并使用 SBT 手动编译,而不是使用 IntelliJ。 我已经为数据库定义了一个 dntity: 案
我通过以下方法公开我的表: public static class TableCacheService { public static IEnumerable Read() {
如何为使用 AND 和 foreach 循环附加条件的 myQuery 分配初始值。 我正在尝试执行以下操作: string myQuery = string.empty; foreach (stri
我需要使用 Azure 表存储执行诸如批量获取之类的操作。我有一个已知 RowKey 和 PartitionKey 的列表,我想检索每一个。 我想知道是否有比单独查询每个实体更好的方法 - 比如批量
假设我有以下特征。 trait ModelTrait{ def id: Option[Long] def name: String } 而且我有两个表。它们的案例类和 tableQuery 字
进一步考虑下面的完整代码块,特别是这部分 - 对象初始化(你会这么称呼它吗?): new LocalFileInfo() { IsFavorite = p.IsFavorite, ...
使用 scala、slick 2.0 和 eclipse 我遇到一个无法解释的错误:“value ddl 不是 scala.slick.lifted.TableQuery[SqliteSpec.thi
我有这个基本特征 trait MyBase { type M type T TableQueryBuilder.builderForTable) 提供该类型类的一个实例。然后,您可以定义一个方
我需要从 Azure 存储表中检索 50.000 个实体,结果应放入列表中。检索实体并不需要太多时间,但将它们从 Iterable 放入 List 需要相对较长的时间,大约 10 秒。我怎样才能在更短
我是一名优秀的程序员,十分优秀!