public ActionResult List(PagerRequest request,ProductPropertyValueSearchOption search)
        {
            int totalCount;
            var prodLinq = _userauthRepo.AuthFilter(_prodRepo.GetAll(), CurrentUser.CustomerId, CurrentUser.Role) as IQueryable<ProductEntity>;
            var linq = _prodpropertyvalRepo.Get(pv => pv.Status != (int)DataStatus.Deleted)
                        .Join(_prodpropertyRepo.Get(p => p.Status != (int)DataStatus.Deleted), o => o.PropertyId, i => i.Id, (o, i) => new { PV = o, P = i })
                        .Join(prodLinq, o => o.P.ProductId, i => i.Id, (o, i) => new { PV = o.PV, P = o.P, T = i })
                        .Where(l => (string.IsNullOrEmpty(search.PropertyDesc) || l.P.PropertyDesc.StartsWith(search.PropertyDesc)) &&
                                   (string.IsNullOrEmpty(search.ValueDesc) || l.PV.ValueDesc.StartsWith(search.ValueDesc)) &&
                                   (!search.ProductId.HasValue || l.P.ProductId == search.ProductId.Value));
            linq = linq.WhereWithPageSort(
                                                 out totalCount
                                                , request.PageIndex
                                                , request.PageSize
                                                , e =>
                                                {
                                                    return e.OrderByDescending(l => l.P.ProductId).ThenByDescending(l => l.P.UpdateDate);
                                                });
             var vo = new List<ProductPropertyViewModel>();
            foreach (var l in linq)
            {
                var existProperty = vo.Find(t => t.ProductId == l.P.ProductId);
                var newValue = new TagPropertyValueViewModel().FromEntity<TagPropertyValueViewModel>(l.PV, p =>
                {
                    p.PropertyDesc = l.P.PropertyDesc;
                    p.SortOrder = l.P.SortOrder??0;
                    p.PropertyId = l.P.Id;
                    p.ValueId = l.PV.Id;
                   
                });
                if (existProperty != null)
                {
                    existProperty.Values.Add(newValue);
                    
                } else
                {
                    vo.Add(new ProductPropertyViewModel().FromEntity<ProductPropertyViewModel>(l.P, p =>
                    {
  
                        p.ProductName = l.T.Name;
                        p.Values = new List<TagPropertyValueViewModel>();
                        p.Values.Add(newValue);
                    }));
                }
    
            }
              
            var v = new Pager<ProductPropertyViewModel>(request, totalCount) { Data =vo };

            return View("List", v);
        }
        public ActionResult List(PagerRequest request,TagPropertyValueSearchOption search)
        {
            int totalCount;
            var linq = _tagpropertyvalueRepo.Get(pv => pv.Status != (int)DataStatus.Deleted)
                        .Join(_tagpropertyRepo.Get(p => p.Status != (int)DataStatus.Deleted), o => o.PropertyId, i => i.Id, (o, i) => new { PV = o, P = i })
                        .Join(_tagRepo.GetAll(), o => o.P.CategoryId, i => i.Id, (o, i) => new { PV = o.PV, P = o.P, T = i })
                        .Where(l => (!search.PId.HasValue || l.PV.Id == search.PId.Value) &&
                                   (string.IsNullOrEmpty(search.PropertyDesc) || l.P.PropertyDesc.StartsWith(search.PropertyDesc)) &&
                                   (string.IsNullOrEmpty(search.ValueDesc) || l.PV.ValueDesc.StartsWith(search.ValueDesc)) &&
                                   (!search.CategoryId.HasValue || l.P.CategoryId == search.CategoryId.Value));
            linq = linq.WhereWithPageSort(
                                                 out totalCount
                                                , request.PageIndex
                                                , request.PageSize
                                                , e =>
                                                {
                                                    return e.OrderByDescending(l => l.P.CategoryId).ThenByDescending(l => l.P.CreatedDate);
                                                });
             var vo = new List<TagPropertyViewModel>();
            foreach (var l in linq)
            {
                var existProperty = vo.Find(t=>t.CategoryId == l.P.CategoryId);
                var newValue = new TagPropertyValueViewModel().FromEntity<TagPropertyValueViewModel>(l.PV,p=>{
                    p.PropertyDesc = l.P.PropertyDesc;
                    p.SortOrder = l.P.SortOrder;
                    p.PropertyId = l.P.Id;
                    p.ValueId = l.PV.Id;
                   
                });
                if (existProperty != null)
                {
                    existProperty.Values.Add(newValue);
                    
                } else
                {
                    vo.Add(new TagPropertyViewModel().FromEntity<TagPropertyViewModel>(l.P,p=>{
  
                        p.CategoryName = l.T.Name;
                        p.Values = new List<TagPropertyValueViewModel>();
                        p.Values.Add(newValue);
                    }));
                }
    
            }
              
            var v = new Pager<TagPropertyViewModel>(request, totalCount) { Data =vo };

            return View("List", v);
        }
        public ActionResult Edit(int id)
        {
            var entity = _prodpropertyvalRepo.Get(pv => pv.Status != (int)DataStatus.Deleted)
                        .Join(_prodpropertyRepo.Get(p => p.Status != (int)DataStatus.Deleted && p.ProductId == id), o => o.PropertyId, i => i.Id, (o, i) => new { PV = o, P = i });
            ProductPropertyViewModel vo = new ProductPropertyViewModel();
            var prodEntity = _prodRepo.Find(id);
            vo.Values = new List<TagPropertyValueViewModel>();
            vo.ProductId = prodEntity.Id;
            vo.ProductName = prodEntity.Name;
            foreach (var l in entity)
            {
                var newValue = new TagPropertyValueViewModel().FromEntity<TagPropertyValueViewModel>(l.PV, p =>
                {
                    p.PropertyDesc = l.P.PropertyDesc;
                    p.SortOrder = l.P.SortOrder??0;
                    p.PropertyId = l.P.Id;
                    p.ValueId = l.PV.Id;
                });
                vo.Values.Add(newValue);
            }

            return View(vo);
        }
        public ActionResult Edit(int id)
        {
            var entity = _tagpropertyvalueRepo.Get(pv => pv.Status != (int)DataStatus.Deleted)
                        .Join(_tagpropertyRepo.Get(p => p.Status != (int)DataStatus.Deleted && p.CategoryId == id), o => o.PropertyId, i => i.Id, (o, i) => new { PV = o, P = i })
                        .Join(_tagRepo.GetAll(), o => o.P.CategoryId, i => i.Id, (o, i) => new { PV = o.PV, P = o.P, T = i });
            TagPropertyViewModel vo = new TagPropertyViewModel();
            vo.Values = new List<TagPropertyValueViewModel>();
            foreach (var l in entity)
            {
                vo.CategoryId = l.P.CategoryId;
                vo.CategoryName = l.T.Name;
                var newValue = new TagPropertyValueViewModel().FromEntity<TagPropertyValueViewModel>(l.PV, p =>
                {
                    p.PropertyDesc = l.P.PropertyDesc;
                    p.SortOrder = l.P.SortOrder;
                    p.PropertyId = l.P.Id;
                    p.ValueId = l.PV.Id;
                });
                vo.Values.Add(newValue);
            }

            return View(vo);
        }