none
Como parametrizar esta función IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null ... RRS feed

  • Pregunta

  • Hola,

    Estoy utilizando un GenricRepository para mi App en MVC. Esta clase tiene un método:

    public virtual IEnumerable<TEntity> Get(
                Expression<Func<TEntity, bool>> filter = null,
                Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
                string includeProperties = "")
            {
                IQueryable<TEntity> query = dbSet;
    
                if (filter != null)
                {
                    query = query.Where(filter);
                }
    
                query = includeProperties.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
    
                return orderBy != null ? orderBy(query).ToList() : query.ToList();
            }

    En mi Controller, quiero utilizar este método, y lo hago de la siguiente manera ...

    var usuario = _utHojas.UsuariosRepository.Get(u => u.Correo == User.Identity.Name).FirstOrDefault();

    Pero .... User.Identity.Name no me lo parametriza como debiera ....

    {u => (u.Correo == value(TaxiMetro.Web.Controllers.HojasController).User.Identity.Name)}

    Y debiera poner ...

    {u => (u.Correo == "jsan@gmail.com"}

    Por???

    Como resuelvo esto??? ....

    Podéis ayudarme???...

    Gracias

    jueves, 18 de diciembre de 2014 16:46

Todas las respuestas

  • hola

    pero el Name del identity es el correo, estas seguro ?

    podrias usar

    string correo =  User.Identity.Name;

    var usuario = _utHojas.UsuariosRepository.Get(u => u.Correo == correo).FirstOrDefault();

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 18 de diciembre de 2014 19:56
  • Hola,

    lo acabo de probar ...

    string correo =  User.Identity.Name;
    
    var usuario = _utHojas.UsuariosRepository.Get(u => u.Correo == correo).FirstOrDefault();
    
    

    Error, esta es mi ventana de depuración ...

    filter -> {u => (u.Correo == value(TaxiMetro.Web.Controllers.HojasController+<>c__DisplayClass2).correo)}
    Básicamente porque "correo" no es "value(TaxiMetro.Web.Controllers.HojasController+<>c__DisplayClass2).correo)", debería ser simplemente: "jsanchco" que es lo que trae "User.Identity.Name".

    No parsea el valor ¿? ....

    jueves, 18 de diciembre de 2014 20:25
  • hola

    la verdad no se como es que implementas el UsuariosRepository.Get() pero no me queda claro lo que mencionas que sobre

    "correo" no es "value(TaxiMetro.Web.Controllers.HojasController+<>c__DisplayClass2).correo)",

    no veo que tiene que ver

    se supone que si usas un repositorio no deberia tener nada que ver con un Controller, son entidades de tu dominio no de la presentacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 18 de diciembre de 2014 23:04
  • Encontré la solución ...

    var name = User.Identity.Name;
    ParameterExpression param = Expression.Parameter(typeof (Usuario), "h");
    Expression boby = Expression.Equal(Expression.PropertyOrField(param, "Correo"),
    Expression.Constant(name, typeof(string)));
     Expression<Func<Usuario, bool>> filter = Expression.Lambda<Func<Usuario, bool>>(boby, param);
    		  
    var usuario = _utHojas.UsuariosRepository.Get(filter).FirstOrDefault();

    Gracias de todos modos Leandro

    viernes, 19 de diciembre de 2014 17:04