2012-07-24 29 views
1

我有一个问题,在使用上CloudTableQuery问题与.Count中()方法C#

public void AccessEntites() 
    { 
     CloudTableQuery entries = 
      (from e in ServiceContext.CreateQuery<T>(TableName) 
      select e).AsTableServiceQuery(); 

     int count = entries.Count(); //An error occurred while processing this request. 
    } 

.count()方法我只想算元素的总数我们有条目。我做错了什么?

+4

给出完整的例外细节。计数不是问题,查询是。它仅在您尝试访问结果时执行(使用.count()) – 2012-07-24 19:09:35

+0

什么是异常/错误细节,AsTableServiceQuery会做什么?那是TableServiceExtensionMethods.AsTableServiceQuery? ... – 2012-07-24 19:11:43

+0

是否有任何原因您的查询表达式不能'CloudTableQuery条目= ServiceContext.CreateQuery (TableName).AsTableServiceQuery();'? – phoog 2012-07-24 19:31:34

回答

2

确保您的输入不为空。

int count; 
if (entries != null) 
    count = entries.Count(); 
+1

我很惊讶,这个答案被接受,因为它显然不是正确的。当'entries'为空时,结果将是NullReferenceException,而不是“处理此请求时发生错误”。 – user1527329 2012-07-24 19:51:55

+0

@ user1527329我对Azure没有太多的了解,所以你可能是对的,但是OP从未给我们提供过实际的错误信息。我可能是错的,但它看起来像[CloudTableQuery](http://msdn.microsoft.com/en-us/library/windowsazure/ee758648)实现IEnumerable,因此计数应该可用。 – LarsTech 2012-07-24 20:05:23

+0

对不起,但我认为这很幼稚。 “处理此请求时发生错误。”在.NET中是一个非常常见的错误消息,因此可以安全地认为这是他得到的(最上面的)错误消息,而不是NullReferenceException,你会得到一个空引用。 – user1527329 2012-07-24 20:07:38

1

此代码不起作用,因为Azure表存储(云表)不支持Count()操作来获取实体数量。获取此值的唯一方法是检索所有实体(更好的是一个小投影)并计算检索到的实体。

编辑: 这里有一个链接到微软的社交论坛,这也是2012年4月(也是有效的)。

http://social.msdn.microsoft.com/Forums/nl-BE/windowsazuredata/thread/440e19fe-f3e0-4c98-a28f-85c535f3d735

+0

结果类型是IEnumerable还是不是? – 2012-07-24 19:18:21

+0

它是IQueryable。但是,无论如何,Azure Table Storage实际上并不提供您期望的许多功能,只有一个IQueryable。 – user1527329 2012-07-24 19:22:30

+0

阅读(测试版)帮助后,我相信这是正确的。 +1 – 2012-07-24 19:28:49