example - iqueryable c# ejemplos
Lista<T> para implementar IQueryable<T> (2)
El motivo de su problema es que si realiza AsQueryable , comprueba si el objeto ya implementa IQueryable y si sí lo devuelve.
Use la new EnumerableQuery<T>(this) lugar de AsQueryable que no realiza esta comprobación.
Solución para .net 3.5:
return ((IEnumerable<T>)this).Select(x=>x).AsQueryable()
La primera vez que se IEnumerable<T> a IEnumerable<T> el método de Select elegido será Enumerable.Select no Queryable.Select . La selección de identidad devolverá un nuevo objeto que no implementa IQueryable<T> , por lo que la comprobación si se implementa en AsQueryable falla.
Estoy tratando de crear un simulacro para mi interfaz IRepository :
public interface IRepository<T> : ICollection<T>, IQueryable<T>
{
}
Con esta implementación:
public class RepositoryFake<T> : List<T>, IRepository<T>
{
public Expression Expression
{
get
{
return this.AsQueryable().Expression;
}
}
public Type ElementType
{
get
{
return this.AsQueryable().ElementType;
}
}
public IQueryProvider Provider
{
get
{
return this.AsQueryable().Provider;
}
}
}
Pero cuando lo uso, estoy obteniendo la excepción StackOverflow . ¿Cómo implementar esta interfaz correctamente para poder usar solo una List como repositorio?
El uso es muy simple.
[Test]
public void Test()
{
RepositoryFake<User> users = new RepositoryFake<User>();
users.Add(new User());
List<User> list = (from user in users
where user.Id == "5"
select user).ToList();
Assert.That(list, Is.Empty);
}
Aquí está la captura de pantalla de la excepción:
Intente usar base.AsQueryable() lugar de this.AsQueryable() .