C# 给定CloudTableQuery/DataServiceQuery,返回关联的TableServiceContext
给定C# 给定CloudTableQuery/DataServiceQuery,返回关联的TableServiceContext,c#,azure,wcf-data-services,azure-table-storage,C#,Azure,Wcf Data Services,Azure Table Storage,给定CloudTableQuery和/或DataServiceQuery,是否可以获取生成查询的TableServiceContext。下面是一个扩展方法,它将为每个IQueryable(同时支持CloudTableQuery和DataServiceQuery)执行此操作: 使用系统; 使用System.Linq; 运用系统反思; 使用Microsoft.WindowsAzure.StorageClient; 公共静态类DataServiceQueryExtensions { 公共静态表Serv
CloudTableQuery
和/或DataServiceQuery
,是否可以获取生成查询的TableServiceContext
。下面是一个扩展方法,它将为每个IQueryable(同时支持CloudTableQuery和DataServiceQuery)执行此操作:
使用系统;
使用System.Linq;
运用系统反思;
使用Microsoft.WindowsAzure.StorageClient;
公共静态类DataServiceQueryExtensions
{
公共静态表ServiceContext GetTableServiceContext(此IQueryable查询)
{
var contextField=query.Provider.GetType().GetField(“Context”,(BindingFlags.Instance | BindingFlags.NonPublic));
if(contextField==null)
返回null;
其他的
返回contextField.GetValue(query.Provider)作为TableServiceContext;
}
}
希望这有帮助
Sandrino我将坚持寻找一种神奇的解决方案,它不需要通过反射使用私人成员,但否则我会将此标记为答案。
using System;
using System.Linq;
using System.Reflection;
using Microsoft.WindowsAzure.StorageClient;
public static class DataServiceQueryExtensions
{
public static TableServiceContext GetTableServiceContext<TType>(this IQueryable<TType> query)
{
var contextField = query.Provider.GetType().GetField("Context", (BindingFlags.Instance | BindingFlags.NonPublic));
if (contextField == null)
return null;
else
return contextField.GetValue(query.Provider) as TableServiceContext;
}
}