Entity Framework Repository Pattern ¿por qué no devolver Iqueryable?

Hay varios buenos blogs sobre cómo implementar el patrón de repositorio junto con el patrón de unidad de trabajo utilizando clases genéricas.

Implementación de una capa de acceso a datos con Entity Framework 6.1

Implementación de los patrones de repositorio y unidad de trabajo

La idea es definir un IRepository de interfaz genérico y un repositorio de clase que oculte cómo se accede realmente a los datos. Se puede acceder usando Entity Framework DbContext, o tal vez el repositorio es una colección en memoria para pruebas unitarias.

public interface public interface IRepository<T> where T : class
{
    T GetById(int Id);
    void DeleteById(int Id);

    void Add(T entity);
    void Update(T entity);

    etc.
}

Muy a menudo veo que se agregan varias funciones de consulta que son similares a las funciones consultables y / o enumerables.

Por ejemplo enImplementar una capa de acceso a datos Veo:

/// Returns an IEnumerable based on the query, order clause and the properties included
/// <param name="query">Link query for filtering.</param>
/// <param name="orderBy">Link query for sorting.</param>
/// <param name="includeProperties">Navigation properties seperated by comma for eager loading.</param>
/// <returns>IEnumerable containing the resulting entity set.</returns>
IEnumerable<T> GetByQuery(Expression<Func<T, bool>> query = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "");

/// <summary>
/// Returns the first matching entity based on the query.
/// </summary>
/// <param name="predicate"></param>
/// <returns></returns>
T GetFirst(Expression<Func<T, bool>> predicate);

Si la interfaz tuviera una función IQueryable GetQuery (), entonces no tendría que hacer funciones como GetFirst () y GetByQuery ().

Pregunta: ¿Por qué no se recomienda esto? ¿Pueden las personas cambiar los datos de manera indeseable?

Respuestas a la pregunta(2)

Su respuesta a la pregunta