IEnumerable и IQueryable, C#

Есть ли разница между этими двумя интерфейсами? В частности при работе с базой данных, они чем-то отличаются?

IEnumerable относится к System.Collection.

IQueryable относится к System.Linq.

При этом всём IQueryable наследует IEnumerable.

Это означает, что IEnumerable реализовывает механизм Linq to Object, а IQueryable - Linq to SQL.

IQueryable:

1. Объект предоставляет удалённый доступ к БД и позволяет перемещаться по данным как в прямом порядке от начала до конца, так и в обратном порядке.

2. В процессе выполнения запроса происходит его оптимизация.

IEnumerable:

1. Оптимизации запроса нет.

2. Двигаться можно только вперёд.

Что же лучше использовать? Всё зависит от конкретной ситуации. Если мы точно знаем что нам нужен весь набор возвращаемых данных, то лучше всего использовать IEnumerable, т.к. он предоставляет максимальную скорость.

В случае же еслинам не нужен весь набор, а только определённые отфильтрованные данные, то лучше всего будет использовать IQueryable.