Tengo una interfaz llamada ICatalog
como se muestra a continuación, donde cada ICatalog
tiene un nombre y un método que devolverá elementos basados en una función Predicate<Item>
.Linq basado alternar genérico al predicado <T>?
public interface ICatalog
{
string Name { get; }
IEnumerable<Item> GetItems(Predicate<Item> predicate);
}
Una implementación específica de un catálogo se puede vincular a catálogos en varios formatos, como XML o una base de datos SQL.
Con un catálogo XML termino deserializando todo el archivo XML en la memoria, por lo que probar cada elemento con la función de predicado no agrega mucho más sobrecarga ya que ya está en la memoria.
Sin embargo, con la implementación de SQL prefiero no recuperar todo el contenido de la base de datos en la memoria, y luego filtrar los elementos con la función de predicado. En cambio, me gustaría encontrar una manera de pasar el predicado al servidor SQL, o de alguna manera convertirlo a una consulta SQL.
Parece un problema que se puede resolver con Linq, pero soy bastante nuevo. ¿Debería mi interfaz devolver IQueryable en su lugar? No me preocupa en este momento cómo implementar realmente una versión SQL de mi catálogo de IC. Solo quiero asegurarme de que mi interfaz lo permita en el futuro.
Gracias por la respuesta Marc. Suena más complicado de lo que quisiera por lo que trato de hacer. ¿Qué quisiste decir con una "interfaz de depósito/servicio de caja negra más clásica"? ¿Puede dar un ejemplo? –