0

我正在查看Microsoft提供的示例"Process Tasks as they Finish"并将该TPL示例适用于Azure存储。合并Linq +“RangeVariables”+ TPL + DynamicTableEntity时出现编译器错误

我的下方标示其中变量domainData报道编译器错误的问题:Unknown method Select(?) of TableQuerySegment<DynamicTableEntity>(完全合格的命名空间中删除)

我也收到以下错误DynamicTableEntity domainData \n\r Unknown type of variable domainData

 /// if you have the necessary references the following most likely should compile and give you same error 

      CloudStorageAccount acct = CloudStorageAccount.DevelopmentStorageAccount; 

      CloudTableClient client = acct.CreateCloudTableClient(); 
      CloudTable tableSymmetricKeys = client.GetTableReference("SymmetricKeys5"); 

      TableContinuationToken token = new TableContinuationToken() { }; 
      TableRequestOptions opt = new TableRequestOptions() { }; 
      OperationContext ctx = new OperationContext() { ClientRequestID = "ID" }; 
      CancellationToken cancelToken = new CancellationToken(); 

      List<Task> taskList = new List<Task>(); 

      var task2 = tableSymmetricKeys.CreateIfNotExistsAsync(cancelToken); 
      task2.Wait(cancelToken); 


      int depth = 3; 
      while (true) 
      { 
       Task<TableQuerySegment<DynamicTableEntity>> task3 = tableSymmetricKeys.ExecuteQuerySegmentedAsync(query, token, opt, ctx, cancelToken); 

       // Run the method 
       task3.Wait(); 

       Console.WriteLine("Records retrieved in this attempt = " + task3.Result.Count());// + " | Total records retrieved = " + state.TotalEntitiesRetrieved); 



     // HELP! This is where I'm doing something the compiler doesn't like 
     // 
       IEnumerable<Task<int>> getTrustDataQuery = 
           from domainData in task3.Result select QueryPartnerForData(domainData, "yea, search for this.", client, cancelToken); 

       // Prepare for next iteration or quit 
       if (token == null) 
       { 
        break; 
       } 
       else 
       { 
        token = task3.Result.ContinuationToken; 

        // todo: persist token token.WriteXml() 
       } 
      } 




    //.... 

    private static object QueryPartnerForData(DynamicTableEntity domainData, string p, CloudTableClient client, CancellationToken cancelToken) 
    { 
     throw new NotImplementedException(); 
    } 

回答

0

你的代码缺少查询。为了测试代码中,我创建了以下查询:

TableQuery<DynamicTableEntity> query = new TableQuery<DynamicTableEntity>() 
    .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp")); 

我还添加了方法QueryPartnerForData它不会做任何事情(只返回null),一切工作正常。所以也许这是QueryPartnerForData方法的问题?找到实际错误的最好方法是在这里和那里设置一个断点。

StackOverflowException常常意味着您被困在无限循环中。几次运行断点并查看代码卡住的位置。难道是QueryPartnerForData调用另一种方法,而另一种方法再次调用QueryPartnerForData

+0

我会澄清:代码不能编译Linq语句,并且StackOverflow注释是对www.stackoverflow.com的引用(不是例外)。 – LamonteCristo

+0

看来我有Linq和RangeVariable的问题:DynamicTableEntity – LamonteCristo

+0

奇怪,我刚刚删除了行并重新输入了它,错误消失了。 Control-Z和重做没有暴露任何差异。有趣的IDE(或插件)搞乱了我。 – LamonteCristo