// This magic is courtesy of this StackOverflow post.
        // https://stackoverflow.com/questions/38316519/replace-parameter-type-in-lambda-expression
        // I made some tweaks to adapt it to our needs - @haacked
        public static Expression <Func <TTarget, bool> > Convert <TSource, TTarget>(
            this Expression <Func <TSource, bool> > root)
        {
            var visitor = new ParameterTypeVisitor <TSource, TTarget>();

            return((Expression <Func <TTarget, bool> >)visitor.Visit(root));
        }
        public static Func <TTarget, TConst> Convert <TSource, TTarget, TConst>(Expression <Func <TSource, TConst> > root)
        {
            var visitor    = new ParameterTypeVisitor <TSource, TTarget>();
            var expression = (Expression <Func <TTarget, TConst> >)visitor.Visit(root);

            return(expression?.Compile());
        }
        public IEnumerable <DalLot> GetByPredicateMany(Expression <Func <DalLot, bool> > expression)
        {
            var visitor = new ParameterTypeVisitor <DalLot, Lot>(expression);
            var expr    = visitor.Convert();
            var lots    = _dbContext.Set <Lot>().Where(expr);

            return(lots.Select(lot => new DalLot()
            {
                Id = lot.LotId,
                IsBlocked = lot.IsBlocked,
                CategoryName = lot.Category.CategoryName,
                CategoryRefId = lot.CategoryRefId,
                IsConfirm = lot.IsConfirm,
                Discription = lot.Discription,
                BlockReason = lot.BlockReason,
                LotName = lot.LotName,
                SellerRefId = lot.SellerRefId,
                EndDate = lot.EndDate,
                IsSold = lot.IsSold,
                SellerEmail = lot.Seller.Email,
                SellerLogin = lot.Seller.Login,
                StartDate = lot.StartDate,
                StartingBid = lot.StartingBid
            }));
        }
 public DalCategory GetByPredicate(Expression<Func<DalCategory, bool>> expression)
 {
     var visitor = new ParameterTypeVisitor<DalCategory, Category>(expression);
     var expr = visitor.Convert();
     var category = _dbContext.Set<Category>().FirstOrDefault(expr);
     var dalCategory = category?.ToDalCategory();
     return dalCategory;
 }
        public DalCategory GetByPredicate(Expression <Func <DalCategory, bool> > expression)
        {
            var visitor     = new ParameterTypeVisitor <DalCategory, Category>(expression);
            var expr        = visitor.Convert();
            var category    = _dbContext.Set <Category>().FirstOrDefault(expr);
            var dalCategory = category?.ToDalCategory();

            return(dalCategory);
        }
 public DalUser GetByPredicate(Expression<Func<DalUser, bool>> expression)
 {
     var visitor = new ParameterTypeVisitor<DalUser, User>(expression);
     var expr = visitor.Convert();
     var user = _dbContext.Set<User>().FirstOrDefault(expr);
     var dalUser = user?.ToDalUser();
     if (dalUser == null)
     {
         return null;
     }
     dalUser.Roles = _roleRepository.GetRolesByUserId(user.UserId);
     return dalUser;
 }
Esempio n. 7
0
        public DalUser GetByPredicate(Expression <Func <DalUser, bool> > expression)
        {
            var visitor = new ParameterTypeVisitor <DalUser, User>(expression);
            var expr    = visitor.Convert();
            var user    = _dbContext.Set <User>().FirstOrDefault(expr);
            var dalUser = user?.ToDalUser();

            if (dalUser == null)
            {
                return(null);
            }
            dalUser.Roles = _roleRepository.GetRolesByUserId(user.UserId);
            return(dalUser);
        }
 public IEnumerable<DalLot> GetByPredicateMany(Expression<Func<DalLot, bool>> expression)
 {
     var visitor = new ParameterTypeVisitor<DalLot, Lot>(expression);
     var expr = visitor.Convert();
     var lots = _dbContext.Set<Lot>().Where(expr);
     return lots.Select(lot => new DalLot()
     {
         Id = lot.LotId,
         IsBlocked = lot.IsBlocked,
         CategoryName = lot.Category.CategoryName,
         CategoryRefId = lot.CategoryRefId,
         IsConfirm = lot.IsConfirm,
         Discription = lot.Discription,
         BlockReason = lot.BlockReason,
         LotName = lot.LotName,
         SellerRefId = lot.SellerRefId,
         EndDate = lot.EndDate,
         IsSold = lot.IsSold,
         SellerEmail = lot.Seller.Email,
         SellerLogin = lot.Seller.Login,
         StartDate = lot.StartDate,
         StartingBid = lot.StartingBid
     });
 }