3

我在 C# 中有下一段代码:

        var results = from g in this.context.MyStorageEventTable
                      where g.PartitionKey == partitionKey
                            && g.EventType == "MyEvent"
                      select g;
        var ev = results.FirstOrDefault();

这对 Azure 表进行了咨询。该表包含超过 20000 个实体。问题是有时变量 ev 有一个空值,有时有实体对象。这是随机发生的。我知道该对象存在于表中,所以空值是错误的行为。为什么会这样?谢谢!

4

3 回答 3

4

试试results.AsTableServiceQuery().FirstOrDefault()。如果这样可行,则问题是查询返回了一个延续令牌,表明还有更多数据,但您没有发出后续查询来跟踪该延续令牌并获取其余数据。您应该始终使用AsTableServiceQuery()免费获得持续令牌关注。

于 2012-11-29T18:03:16.157 回答
2

而是尝试:

results.take(1).AsTableServiceQuery().execute().firstOrDefault() 

您遇到的问题是由于firstordefault将查询转换为错误的类型引起的。

take 1 只要求 azure 中的 1 行以提高效率以配合您的firstordefault.

于 2012-12-01T09:24:55.987 回答
0

如果问题仍然存在,请尝试:

results.AsTableServiceQuery().Take(1).ToArray().FirstOrDefault()

我遇到了类似的问题,这个解决方案对我有用。当找到结果实体或不返回任何继续标记时,此查询将跟随继续标记。

results.AsTableServiceQuery().FirstOrDefault() 也应该遵循延续标记,但它不这样做。这是一个奇怪的行为,它也会影响 First()、Single() 和 SingleOrDefault()。在所有这些情况下,明确地期望单个实体并且不遵循延续令牌。仅当预期结果是一个集合时才这样做。

于 2013-07-08T10:20:44.540 回答