public abstract class BaseQueryProvider : IQueryProvider {
public IQueryable<T> CreateQuery<T>(Expression expression) {
if (expression == null) {
	throw new ArgumentNullException("vraz");
}
if (!typeof(IQueryable<T>).IsAssignableFrom(expression.Type)) {
	throw new ArgumentException("Vraz v argumentu je neplatn.");
}
return (IQueryable<T>) this.CreateQuery(expression);
}

public TResult Execute<TResult>(Expression expression) {
if (expression == null) {
	throw new ArgumentNullException("vraz");
}
if (!typeof(IQueryable<TResult>).IsAssignableFrom(expression.Type)) {
	throw new ArgumentException("Vraz v argumentu je neplatn.");
}
return (TResult) this.Execute(expression);
}

public abstract IQueryable CreateQuery(Expression expression);
public abstract object Execute(Expression expression);
}
