¿El propósito es AsQueryable()solo para que pueda pasar un IEnumerablea métodos que podrían esperar IQueryable, o hay una razón útil para representar IEnumerablecomo IQueryable? Por ejemplo, se supone que debe ser para casos como este:
IEnumerable<Order> orders = orderRepo.GetAll();
// I don't want to create another method that works on IEnumerable,
// so I convert it here.
CountOrders(orders.AsQueryable());
public static int CountOrders(IQueryable<Order> ordersQuery)
{
    return ordersQuery.Count();
}
¿O realmente lo hace hacer algo diferente?
IEnumerable<Order> orders = orderRepo.GetAll();
IQueryable<Order> ordersQuery = orders.AsQueryable();
IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3);
IQueryable<Order> filteredOrdersQuery = ordersQuery.Where(o => o.CustomerId == 3);
// Are these executed in a different way?
int result1 = filteredOrders.Count();
int result2 = filteredOrdersQuery.Count();
¿Las IQueryableversiones de estos métodos de extensión simplemente crean una expresión que termina haciendo lo mismo una vez que se ejecuta? Mi pregunta principal es, ¿cuál es un caso de uso real para usar AsQueryable?
fuente

IQueryable<T>deriva deIEnumerable<T>, ¿puede explicar lo que quiere decir con "IQueryable no enumerable"?IQueryableque es más que un paqueteIEnumerable, y que en realidad aprovecha las capacidades adicionales de unIQueryable.El caso más válido que tengo para AsQueryable es la prueba unitaria. Digamos que tengo el siguiente ejemplo algo artificial
y quiero escribir una prueba unitaria para asegurarme de que el controlador devuelve los resultados devueltos desde el repositorio. Se vería algo como esto:
donde realmente, todo lo que el método AsQueryable () me permite hacer es satisfacer al compilador al configurar un simulacro.
Sin embargo, me interesaría dónde se usa esto en el código de la aplicación.
fuente
Como señaló sanjuro, el propósito de AsQueryable () se explica en Uso de AsQueryable con Linq To Objects y Linq To SQL . En particular, el artículo dice:
fuente
El propósito de AsQueryable () se explica en gran medida en este artículo Uso de AsQueryable con Linq To Objects y Linq To SQL
De la sección Comentarios del método MSDN Queryable.AsQueryable:
Eso es exactamente lo que se menciona y se usa en el artículo anterior. En su ejemplo, depende de qué es orderRepo.GetAll regresando, IEnumerable o IQueryable (Linq to Sql). Si devuelve IQueryable, el método Count () se ejecutará en la base de datos; de lo contrario, se ejecutará en la memoria. Mire cuidadosamente el ejemplo en el artículo de referencia.
fuente
IQueryableDocumentación de cotización de interfaz :Entonces, para alguien que tiene la intención de hacer que su estructura de datos sea consultable en .NET, esa estructura de datos que no es necesaria puede ser enumerada o tener un enumerador válido .
IEnumeratores una interfaz para iterar y procesar el flujo de datos .fuente
IQueryableyIEnumerable, pero no entiendo el caso de uso delAsQueryablemétodo de extensión. Sin embargo, me estoy tropezando un poco con esa oración, que sospecho que podría tener la respuesta que estoy buscando (según los votos a favor).AsQueryable()?" Si estoy comenzando con un IEnumerable (algo que ya es capaz de proporcionar una capacidad de enumeración), ¿por qué tendría que convertir paraIQueryableusar el método de extensiónAsQueryable()? ¿Quizás un pequeño ejemplo de código para ilustrar dónde sería útil esto? Parece que me falta algo en tu explicación. Gracias por tu tiempo.linq to sql,linq to xmly entonces ... si desea escribir unlinqcontrolador que se dirija a sus estructuras de datos (linq to your data), para que los usuarios de su api tengan la posibilidad de ejecutarlinqconsultas en sus estructuras de datos, debe elegirIQueryableIQueryableyIEnumerable. Sé la diferencia y no es eso lo que estoy pidiendo. Estoy preguntando por qué alguien querría tener algo que implementaIEnumerable, y convertirla en unaIQueryableutilizando elAsQueryablemétodo de extensión. ¿Eso es lo que estás respondiendo? Todavía no puedo decir ...