Скажем, мне нужен метод расширения, который выбирает только требуемые свойства из разных источников. Источником может быть база данных или сборка в памяти. Поэтому я определил такой метод расширения:
public IQueryable<TResult> SelectDynamic<TResult>(
this IQueryable<T> source,
...)
Это отлично работает для IQueryable s. Но я должен вызвать эту функцию также для IEnumerable s.
И в этом случае я могу вызвать его с помощью .AsQueryable():
myEnumerable.AsQueryable()
.SelectDynamic(...)
.ToList();
Оба работают нормально. И у меня есть такой вопрос, если оба работают нормально, , в каких условиях я должен создать два разных метода расширения для одной и той же цели, поскольку один работает с IEnumerable, а другой с IQueryable?
Мой метод должен отправить запрос в базу данных в случае Queryable.
Например, здесь источник .Select метода расширения внутри пространства имен System.Linq:
Я снова повторяю свой основной вопрос:
Мой метод должен отправить запрос в базу данных в случае Queryable, но не при работе с IEnumerable. И пока я использую AsQueryable() для перечислений. Потому что я не хочу писать тот же код для Enumerable. Может ли он иметь некоторые побочные эффекты?