public class QueryProvider : IQueryProvider
{
public IQueryable CreateQuery(Expression expression)
{
return new QueryableSample(this, expression);
}
public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return (IQueryable<TElement>) new QueryableSample(this, expression);
}
public object Execute(Expression expression)
{
return QueryResult.Execute(expression, false);
}
public TResult Execute<TResult>(Expression expression)
{
bool IsEnumerable = (typeof(TResult).Name == "IEnumerable`1");
return (TResult)QueryResult.Execute(expression, IsEnumerable);
}
}
public sealed class QueryResult
{
public static object Execute(Expression expression, bool isEnumerable)
{ // 利用expression得到数据结果,设其为records
QueryableSample records = null;
if (isEnumerable)
return records.Provider.CreateQuery(expression);
else
return records.Provider.Execute(expression);
}
}