public IEnumerable <Good> GetGoods(StoreGoodsFilter <int, int> filter) { try { var query = from sGood in Db.Set <StoreGood>() join good1 in Db.Set <Good>() on sGood.GoodId equals good1.Id where sGood.StoreId == filter.StoreId select good1; if (filter.GoodCategoryIds != null && filter.GoodCategoryIds.Any()) { query = from good in query join goodCategory in Db.Set <GoodCategory>() on good.Id equals goodCategory.GoodId where filter.GoodCategoryIds.Contains(goodCategory.CategoryId) select good; } if (filter.GoodTypeIds != null && filter.GoodTypeIds.Any()) { query = from good in query join goodType in Db.Set <GoodType>() on good.Id equals goodType.GoodId where filter.GoodTypeIds.Contains(goodType.TypeId) select good; } if (filter.GoodColorIds != null && filter.GoodColorIds.Any()) { query = from good in query join goodColor in Db.Set <GoodColor>() on good.Id equals goodColor.GoodId where filter.GoodColorIds.Contains(goodColor.ColorId) select good; } if (filter.GoodDesignerIds != null && filter.GoodDesignerIds.Any()) { query = from good in query join goodDesigner in Db.Set <GoodDesigner>() on good.Id equals goodDesigner.GoodId where filter.GoodDesignerIds.Contains(goodDesigner.DesignerId) select good; } if (filter.GoodMaterialsIds != null && filter.GoodMaterialsIds.Any()) { query = from good in query join goodMaterial in Db.Set <GoodMaterial>() on good.Id equals goodMaterial.GoodId where filter.GoodMaterialsIds.Contains(goodMaterial.MaterialId) select good; } if (filter.GoodSizeIds != null && filter.GoodSizeIds.Any()) { query = query.Where(it => filter.GoodSizeIds.Contains(it.SizeId)); } if (filter.GoodHeightInterval != null && (filter.GoodHeightInterval.End.HasValue || filter.GoodHeightInterval.Start.HasValue)) { if (filter.GoodHeightInterval.Start.HasValue && filter.GoodHeightInterval.End.HasValue) { query = query.Where(it => it.Height >= filter.GoodHeightInterval.Start && it.Height <= filter.GoodHeightInterval.End); } if (filter.GoodHeightInterval.End.HasValue && !filter.GoodHeightInterval.Start.HasValue) { query = query.Where(it => it.Height >= 0 && it.Height <= filter.GoodHeightInterval.End); } if (filter.GoodHeightInterval.Start.HasValue && !filter.GoodHeightInterval.End.HasValue) { query = query.Where(it => it.Height >= filter.GoodHeightInterval.Start); } } if (filter.GoodWidthInterval != null && (filter.GoodWidthInterval.End.HasValue || filter.GoodWidthInterval.Start.HasValue)) { if (filter.GoodWidthInterval.Start.HasValue && filter.GoodWidthInterval.End.HasValue) { query = query.Where(it => it.Width >= filter.GoodWidthInterval.Start && it.Width <= filter.GoodWidthInterval.End); } if (filter.GoodWidthInterval.End.HasValue && !filter.GoodWidthInterval.Start.HasValue) { query = query.Where(it => it.Width >= 0 && it.Width <= filter.GoodWidthInterval.End); } if (filter.GoodWidthInterval.Start.HasValue && !filter.GoodWidthInterval.End.HasValue) { query = query.Where(it => it.Width >= filter.GoodWidthInterval.Start); } } if (filter.GoodDepthInterval != null && (filter.GoodDepthInterval.End.HasValue || filter.GoodDepthInterval.Start.HasValue)) { if (filter.GoodDepthInterval.Start.HasValue && filter.GoodDepthInterval.End.HasValue) { query = query.Where(it => it.Depth >= filter.GoodDepthInterval.Start && it.Depth <= filter.GoodDepthInterval.End); } if (filter.GoodDepthInterval.End.HasValue && !filter.GoodDepthInterval.Start.HasValue) { query = query.Where(it => it.Depth >= 0 && it.Depth <= filter.GoodDepthInterval.End); } if (filter.GoodDepthInterval.Start.HasValue && !filter.GoodDepthInterval.End.HasValue) { query = query.Where(it => it.Depth >= filter.GoodDepthInterval.Start); } } query = filter.Sord.Equals("desc", StringComparison.OrdinalIgnoreCase) ? query.OrderByDescending(filter.Sidx) : query.OrderBy(filter.Sidx); query = query.Skip(filter.Rows * (filter.Page - 1)).Take(filter.Rows).Distinct(); //if (filter.GoodInitOptions.HasFlag(GoodInitOptions.InitSize)) // query.Include(it => it.Size); foreach (var good in query) { _goodRepo.InitGood(good, filter.GoodInitOptions); } return(query); } catch (Exception ex) { LogEventManager.Logger.Error(ex.Message, ex); throw; } }
public void GetGoods() { try { var options = CreateNewContextOptions(); using (var db = new StoreContext(options)) { var repository = new StoreRepository(db); StoreTestHelper.PopulateDefaultStoreDataCtx(db); IEnumerable <Good> result = null; var filter = new StoreGoodsFilter <int, int>() { StoreId = 1 }; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodCategoryIds = (from entity in db.Set <GoodCategory>() select entity.CategoryId).Distinct().ToList(); //db.Set<GoodCategory>().Include(it => it.Category).Select(it => it.Category.Id).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); filter.GoodCategoryIds = null; filter.GoodTypeIds = db.Set <GoodType>().Select(it => it.TypeId).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); filter.GoodTypeIds = null; filter.GoodDesignerIds = db.Set <GoodDesigner>().Select(it => it.DesignerId).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); filter.GoodDesignerIds = null; filter.GoodColorIds = db.Set <GoodColor>().Select(it => it.ColorId).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); filter.GoodColorIds = null; filter.GoodMaterialsIds = db.Set <GoodMaterial>().Select(it => it.MaterialId).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); filter.GoodColorIds = null; filter.GoodMaterialsIds = null; filter.GoodDepthInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodDepthInterval.End = null; filter.GoodDepthInterval.Start = 20; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodDepthInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodDepthInterval.Start = null; filter.GoodDepthInterval.End = null; filter.GoodHeightInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodHeightInterval.End = null; filter.GoodHeightInterval.Start = 20; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodHeightInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodHeightInterval.End = null; filter.GoodHeightInterval.Start = null; filter.GoodWidthInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodWidthInterval.End = null; filter.GoodWidthInterval.Start = 20; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodWidthInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodHeightInterval.Start = 20; filter.GoodHeightInterval.End = 100; filter.GoodDepthInterval.Start = 20; filter.GoodDepthInterval.End = 100; Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 3); filter.GoodCategoryIds = db.Set <GoodCategory>().Select(it => it.CategoryId).Distinct().ToList(); filter.GoodTypeIds = db.Set <GoodType>().Select(it => it.TypeId).Distinct().ToList(); filter.GoodDesignerIds = db.Set <GoodDesigner>().Select(it => it.DesignerId).Distinct().ToList(); filter.GoodColorIds = db.Set <GoodColor>().Select(it => it.ColorId).Distinct().ToList(); filter.GoodColorIds = null; filter.GoodMaterialsIds = db.Set <GoodMaterial>().Select(it => it.MaterialId).Distinct().ToList(); Assert.DoesNotThrow(() => result = repository.GetGoods(filter)); Assert.True(result != null && result.Any() && result.Count() == 1); } } catch (Exception ex) { LogEventManager.Logger.Error(ex); throw; } }
public IEnumerable <Good> GetGoods(StoreGoodsFilter <int, int> filter) { throw new NotImplementedException(); }