Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在Azure表存储上应用动态LINQ,但异常值不能为null_Linq_Azure_Azure Table Storage - Fatal编程技术网

正在Azure表存储上应用动态LINQ,但异常值不能为null

正在Azure表存储上应用动态LINQ,但异常值不能为null,linq,azure,azure-table-storage,Linq,Azure,Azure Table Storage,我正在尝试使用动态LINQ查询azure表存储的表,以仅获取动态构造谓词中的列子集。我能够成功地生成谓词,但要实现Select(即投影)操作以从Azure表的实体中仅获取所需的属性/列,我面临着困难。为了得到列的子集,我尝试使用动态LINQ库。这里的列不是预定义的,列可以是任何内容,用户可以选择。这些列只是Customer类的属性 Months.AsParallel().ForAll(x => RowKeys.AsParallel().WithDegreeOfParallelism(5).

我正在尝试使用动态LINQ查询azure表存储的表,以仅获取动态构造谓词中的列子集。我能够成功地生成谓词,但要实现Select(即投影)操作以从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);

                }

            }
          ));
Months.AsParallel().ForAll(x=>RowKeys.AsParallel().WithDegreeOfParallelism(5).ForAll(y=>
{
字符串StartRowKey=y.GetRowKeyStartFilter();
字符串EndRowKey=y.GetRowKeyEndFilter();
DataContextExciseCustVen rptContextParallel=新DataContextExciseCustVen();
var strPredicate=GetPredicate(x.ToString(),StartRowKey,EndRowKey);
IQueryable查询=(rptContextParallel.CreateQuery(DomainData.Entities.Exchange.Invoice.TABLE_NAME)
.Where(strPredicate)
。选择(“新建(分区键、行键、时间戳、公司代码、程序代码)”)作为IQueryable;
CloudTableQuery dyn=query.AsTableServiceQuery();
foreach(dyn.Execute()中的变量z)
{
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>;
IQueryable查询=(rptContextParallel.CreateQuery(DomainData.Entities.Customer.TABLE_NAME)
.Where(strPredicate)
。选择(“新建(公司代码、程序代码、客户名称等)”)作为IQueryable;
上面的语句Select子句返回IQueryable类型,并且它被类型转换为IQueryable,因为IQueryable不包含一个TableServiceQuery扩展方法。所以我把cased打到IQueryable。CloudTableQuery dyn=query.AsTableServiceQuery()。。在这里,它抛出一个异常,其值不能为null。看起来类型转换失败。因此无法计算linq表达式。使用ASTableServiceQuery扩展方法实现IQueryable的任何变通方法

我试过另一种方法,我把这句话注释掉了 //CloudTableQuery dyn=query.AsTableServiceQuery(); 改变了如下的循环,效果很好。
foreach(查询中的变量z)
{}
但问题是,我没有使用存储客户端的任何AsTableServiceQuery()和execute方法。不调用AsTableServiceQuery会有任何副作用。我将能够接收所有带有ContinuationToken或密钥等的数据。从azure表返回的结果将大约为100万或更多。因此,上面的查询可以检索所有记录以及其他键


请在这方面帮助我…

你能用
.AsQueryable()
代替
作为IQueryable
吗?不,它不工作。。asQuerable()返回不包含AsTableServiceQuery()的IQueryable()