Скажем, мне нужен метод расширения, который выбирает только требуемые свойства из разных источников. Источником может быть база данных или сборка в памяти. Поэтому я определил такой метод расширения:
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
. Может ли он иметь некоторые побочные эффекты?