我在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具有空值,并且有时具有实体对象。这是随机发生的。我知道该对象存在于表中,因此null值是错误的行为。为什么会这样?谢谢!
答案 0 :(得分:4)
试试results.AsTableServiceQuery().FirstOrDefault()
。如果这样做,问题是继续令牌回来了查询,表明有更多的数据,但你没有发出跟进查询来遵循该延续令牌并获得其余的数据。您应该始终使用AsTableServiceQuery()
免费获得延续令牌。
答案 1 :(得分:2)
而是尝试:
results.take(1).AsTableServiceQuery().execute().firstOrDefault()
您遇到的问题是由firstordefault
将查询转换为错误的类型引起的。
拍摄1只是要求azure只有1行,以提高效率firstordefault
。
答案 2 :(得分:0)
如果问题仍然存在,请尝试:
results.AsTableServiceQuery().Take(1).ToArray().FirstOrDefault()
我遇到了类似的问题,这个解决方案对我有用。在查找结果实体或未返回连续标记时,此查询遵循延续标记。
results.AsTableServiceQuery()。FirstOrDefault()也应该遵循延续令牌,但它不会这样做。这是一种奇怪的行为,也会影响First(),Single()和SingleOrDefault()。在所有这些情况下,明确地期望单个实体并且不遵循继续令牌。只有在预期结果是集合时才会这样做。