Одним из распространенных шаблонов является использование словаря от типа к функции соответствующего типа. Например:
private static readonly IDictionary<Type, Func<object>> Fetchers =
new Dictionary<Type, Func<object>>();
{
(typeof(Object1), () => DataAccess.GetAllObject1().AsQueryable()),
(typeof(Object2), () => DataAccess.GetAllObject2().AsQueryable()),
// etc
};
public IQueryable<T> GetAll()
{
Func<object> func = Fetchers[typeof(T)];
if (func == null)
{
throw new NotImplementedException();
}
return (IQueryable<T>) func();
}
Приведение происходит потому, что вы не можете выразить отношение типов в словаре, но, по крайней мере, немного проще добавлять новые типы и т. Д.
Вы можете перевести вызов на AsQueryable()
на GetAll()
в зависимости от того, что GetAllObject1()
и т. Д. Вернет.