我试图使用动态LINQ查询查询azure表存储的表,以获得动态构造谓词中的列的子集 . 我能够成功生成谓词,但实现选择即投影操作只从Azure表的实体中获取所需的属性/列我遇到了困难 . 要获取列的子集,我正在尝试使用动态LINQ库 . 这里的列不是预定义的,列可以是任何内容,用户可以选择 . 这些列只是Customer类的属性..

Months.AsParallel().ForAll(x => RowKeys.AsParallel().WithDegreeOfParallelism(5).ForAll(y =>
            {
                 string StartRowKey = y.GetRowKeyStartFilter();
                string EndRowKey = y.GetRowKeyEndFilter();
                DataContextExciseCustVen rptContextParallel = new DataContextExciseCustVen();
                var strPredicate =     GetPredicate(x.ToString(), StartRowKey, EndRowKey);
                IQueryable<dynamic> query = (rptContextParallel.CreateQuery<DomainData.Entities.Excise.Invoice>(DomainData.Entities.Excise.Invoice.TABLE_NAME)
                .Where(strPredicate)
                .Select("new (PartitionKey ,RowKey ,Timestamp ,CompanyCode,ProgramCode)")) as IQueryable<dynamic>;
                CloudTableQuery<dynamic> dyn = query.AsTableServiceQuery();
                foreach (var z in dyn.Execute())
                {
                     threadSafeData.Add(z);

                }

            }
          ));

当我执行上面的代码时,我在query.AsTableServiceQuery();上得到异常,Value不能为null . 选择(“new(Col1,Col2)”)返回IQueryable类型,但不返回IQueryable . 因为我从Azure表返回子列集,所以我不知道对象的目标类型 . 它每次都会匿名 . IQueryable不包含AsTableServiceQuery()扩展方法 . 但IQueryable有Azure Client SDK的这种扩展方法 .

IQueryable<dynamic> query = (rptContextParallel.CreateQuery<Customer>(DomainData.Entities.Customer.TABLE_NAME)
                .Where(strPredicate)
               .Select("new (CompanyCode,ProgramCode,CustomerName,...)")) as IQueryable<dynamic>;

上面的语句,Select Clause返回IQueryable类型,它是类型转换为IQueryable,因为IQueryable不包含AsTableServiceQuery扩展方法 . 所以我输入了IQueryable . CloudTableQuery dyn = query.AsTableServiceQuery(); ..这里抛出一个异常值,不能为null . 看起来类型转换失败了 . 因为无法评估linq表达式 . 任何使用ASTableServiceQuery扩展方法获得IQueryable的工作 .

我尝试了其他方式,我注释掉了这个声明// CloudTableQuery dyn = query.AsTableServiceQuery();并改变为下面的循环,这就像魅力 . foreach (var z in query) {} 但问题是,我没有使用任何AsTableServiceQuery()和Storage Client的执行方法 . 不调用AsTableServiceQuery会有任何副作用吗?我能用ContinuationTokens或Keys等接收所有数据,从azure表返回的结果大约是100万或更多 . 因此,上面的查询可以检索所有记录以及其他键 .

请帮帮我...