He visto esta pregunta publicada anteriormente, pero no estoy satisfecho de haber entendido las ramificaciones completas. El problema es qué tipo de devolución debería tener una capa de datos que utiliza el retorno de linq-a-sql para una máxima flexibilidad y capacidad de consulta. Esto es lo que he leído/encontrado:List, IList, IEnumerable, IQueryable, ICollection, ¿cuál es el tipo de devolución más flexible?
IEnumerable es limitada y sólo permite la lectura de marcha hacia adelante. IEnumerable es el más genérico. Lo que he encontrado es que IEnumerable permite operaciones de consulta frente a la sintaxis de la extensión.
La lista permite una mayor flexibilidad debido a las operaciones de inserción.
Se deben usar colecciones en lugar de listas para habilitar las colecciones de solo lectura.
IQueryable nunca debe usarse, debe "usarse y apagarse". IQueryable no devuelve una lista sino que genera una sintaxis de consulta para la base de datos.
Siento que tengo una mejor idea de las compensaciones, pero todavía no está seguro acerca de algunas cosas:
¿Por qué elegir las variantes de interfaces más de los tipos de hormigón? Es decir, IList o ICollection versus List o Collection. ¿Qué beneficio obtendré?
Veo que las operaciones de extensión funcionan, pero ¿funcionará también la sintaxis de consulta ampliada?
Alguien me sugirió que use AsQueryable() antes. Pero, ¿por qué haría esto si no tengo conexión a la base de datos? Parece que los métodos de extensión funcionan independientemente.
Elimina la clase "Lista" de tu pregunta. IList, IEnumerable, IQueryable, etc. son todas las interfaces, mientras que "List" es una clase. La clase "Lista" es una manzana entre naranjas en su pregunta. – riwalk
@Stargazer que es parte de la pregunta, ¿cuál es el beneficio de usar IList vs List. Estoy escribiendo algunos ejemplos ahora. –
@Curtis, eso es lo que estoy diciendo: List implementa IList, y por lo tanto * is * an IList. Son manzanas y naranjas, y no creo que entiendas la diferencia. Una mejor manera de reformular una pregunta que implica la diferencia entre los dos sería: "¿Cuál es la diferencia entre devolver una clase y devolver una interfaz?" – riwalk