He definido una clase GenericRepository que realiza la interacción db.Soluciones para el uso de métodos personalizados/métodos de extensión en LINQ to Entidades
protected GenericRepository rep = new GenericRepository();
Y en mis clases BLL, que puede consultar la base de datos como:
public List<Album> GetVisibleAlbums(int accessLevel)
{
return rep.Find<Album>(a => a.AccessLevel.BinaryAnd(accessLevel)).ToList();
}
BinaryAnd es un método de extensión que comprueba dos valores int poco a poco. p.ej. AccessLevel=5
=>AccessLevel.BinaryAnd(5)
y AccessLevel.binaryAnd(1)
ambos devuelven verdadero.
Sin embargo, no puedo usar este método de extensión en mis consultas LINQ. Obtengo un error de tiempo de ejecución de la siguiente manera:
LINQ to Entities does not recognize the method 'Boolean BinaryAnd(System.Object, System.Object)' method, and this method cannot be translated into a store expression.
También traté de cambiarlo a un método personalizado, pero no tuve suerte. ¿Cuáles son las soluciones?
¿Debo obtener todos los álbumes y luego iterarlos a través de un bucle foreach y elegir los que coincidan con los AccessLevels?
Gracias Reed. Supongo que es la única forma. – Kamyar
@Kamyar: Simplemente debería ser una cuestión de no usar el método de extensión, y poner el código real en la consulta - ver mi edición. –