C # LINQ to Entities no reconoce el método ‘Boolean’

Tengo la siguiente expresión linq en la syntax lambda:

var myValue = 6; var from = 2; var to = 8; var res = MyList.Where(m => m.person.Id == person.Id && IsBetween(myValue, from, to)) .Select(x => new Person { blah blah blah }) .ToList()); 

IsBetween es un método simple de ayuda genérica para ver si tengo algo intermedio:

 public bool IsBetween(T element, T start, T end) { return Comparer.Default.Compare(element, start) >= 0 && Comparer.Default.Compare(element, end) <= 0; } 

Ahora recibo este error y no sé muy bien cómo solucionarlo:

LINQ to Entities no reconoce el método ‘Boolean IsBetween [Decimal] (System.Decimal, System.Decimal, System.Decimal)’, y este método no se puede traducir a una expresión de tienda.

No puede llamar a métodos arbitrarios desde una consulta LINQ to Entities, ya que la consulta se ejecuta dentro del motor de base de datos SQL. Solo puede llamar a los métodos que el marco puede traducir en SQL equivalente.

Si necesita llamar a un método arbitrario, el operador de consulta que llama a la llamada al método deberá ir precedido por un operador AsEnumerable() tal manera que la llamada sea del lado del cliente. Tenga en cuenta que al hacer esto, todos los resultados del lado izquierdo de AsEnumerable() cargarán potencialmente en la memoria y se procesarán.

En los casos en que el método al que está llamando sea lo suficientemente corto, simplemente alinearía la lógica. En su caso, también tendría que eliminar las llamadas de Comparer , e IsBetween(myValue, from, to) simplemente se convertiría en myValue >= from && myValue <= to .

Además de esto, si desea pasar los valores al método IsBetween de MyList.

Tome una clase contenedora (aquí Persona) contiene las mismas propiedades que se pasarán al método. y hacer algo como esto:

 var res = MyList.Where(m => m.person.Id == person.Id) .Select(x => new Person { p1 = x.p1, p2 = x.p2 }) .AsEnumerable() .where(x => (IsBetween(x.p1, x.p2))) .ToList());