linq linq-to-sql ado.net

linq - ¿Hay una implementación de IQueryable sobre DbDataReader?



linq-to-sql ado.net (1)

No veo ningún beneficio en implementar IQueryable<T> , que sugiere más funcionalidad de la que realmente está disponible, sin embargo, podría implementarla como IEnumerable<T> con la suficiente IEnumerable<T> , con la advertencia de que solo es una vez. Un bloque iterador sería una elección razonable:

public static IEnumerable<IDataRecord> AsEnumerable( this IDataReader reader) { while (reader.Read()) { yield return reader; // a bit dangerous } }

El "un poco peligroso" se debe a que la persona que llama podría devolverlo y abusar de él ...

Tengo un montón de código existente que usa ADO.NET sin formato (DbConnection, DbDataReader, etc.). Me gustaría hacer la transición al uso de LINQ to SQL para el nuevo código, pero por ahora pongo tanto el código existente como el nuevo detrás de un conjunto unificado de clases de repositorio.

Un problema que tengo es el siguiente: me gustaría que las clases de Repository expongan los conjuntos de resultados como IQueryable <> que obtengo de forma gratuita con LINQ to SQL. ¿Cómo envuelvo mis conjuntos de resultados de DbDataReader existentes en un IQueryable? ¿Tengo que implementar IQueryable sobre DbDataReader desde cero?

Tenga en cuenta que conozco LINQ to DataSet, pero no uso DataSets debido a problemas de escala de memoria, ya que los conjuntos de resultados que trato pueden ser bastante grandes (orden de 1000). Esto implica que la implementación de IQueryable sobre DbDataReader también necesitará ser eficiente (es decir, no almacenar en caché los resultados en la memoria).