0

我试图使用动态 LINQ 查询来查询天蓝色表存储的表,以仅获取沿动态构造谓词的列的子集。我能够成功生成谓词,但是要实现 Select ie Projection Operation 以仅从 Azure 表的实体中获取所需的属性/列,我遇到了困难。为了获得列的子集,我正在尝试使用动态 LINQ 库。这里的列没有预定义,列可以是任何东西,用户可以选择。这些列只不过是客户类的属性..

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(); 处遇到异常,值不能为 null 。Select("new (Col1,Col2)") 返回 IQueryable 类型,但不返回 IQueryable。因为我要从 Azure 表返回子集的列,所以我不知道对象的目标类型。每次都会匿名。IQueryable 不包含 AsTableServiceQuery() 扩展方法。但 IQueryable 具有来自 Azure 客户端 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 扩展方法。所以我输入 cased 到 IQueryable 。CloudTableQuery dyn = query.AsTableServiceQuery(); ..这里它抛出一个异常,其值不能为空。看起来类型转换失败了。因为无法评估 linq 表达式。使用 ASTableServiceQuery 扩展方法使 IQueryable 变通的任何解决方法。

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

请帮我解决这个...

4

0 回答 0