/// <summary> /// 获取商品状态的特征 /// </summary> /// <param name="product">商品</param> /// <returns></returns> public static ProductStateTrait GetStateTrait(this Database.Product product) { var type = Application.Ioc.ResolveMany <IProductState>() .First(s => s.State == product.State).GetType(); return(ProductStateTrait.For(type)); }
/// <summary> /// 过滤数据 /// </summary> public void OnQuery( StaticTableSearchRequest request, IDatabaseContext context, ref IQueryable <Database.Product> query) { // 按分类 var classId = request.Conditions.GetOrDefault <long?>("class"); if (classId != null) { query = query.Where(q => q.Classes.Any(c => c.Id == classId)); } // 按标签 var tagId = request.Conditions.GetOrDefault <long?>("tag"); if (tagId != null) { query = query.Where(q => q.Tags.Any(t => t.Id == tagId)); } // 按价格范围(这里不考虑货币) var priceRange = request.Conditions.GetOrDefault <string>("price_range"); if (!string.IsNullOrEmpty(priceRange) && priceRange.Contains('~')) { var priceBounds = priceRange.Split('~');; var lowerBound = priceBounds[0].ConvertOrDefault <decimal>(); var upperBound = priceBounds[1].ConvertOrDefault <decimal>(); query = query.Where(q => q.MatchedDatas.Any(d => d.Price != null && d.Price >= lowerBound)); if (upperBound > 0) { query = query.Where(q => q.MatchedDatas.Any(d => d.Price != null && d.Price <= upperBound)); } } // 按关键词 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Name.Contains(request.Keyword)); } // 只显示未删除且允许显示的商品 var visibleStates = Application.Ioc.ResolveMany <IProductState>() .Where(s => ProductStateTrait.For(s.GetType()).VisibleFromProductList) .Select(s => s.State).ToList(); query = query.Where(q => !q.Deleted && visibleStates.Contains(q.State)); }