public void SaveSorting(ProductOption option, List <ProductOptionValueSortingData> sortingInfo) { IList <ProductOptionValueSort> productOptionValueSorts = GetProductOptionValueSorts(option); _session.Transact(session => { foreach (ProductOptionValueSortingData data in sortingInfo) { ProductOptionValueSort existingSort = productOptionValueSorts.FirstOrDefault(sort => sort.Value == data.Value); if (existingSort != null) { existingSort.DisplayOrder = data.DisplayOrder; session.Update(existingSort); continue; } existingSort = new ProductOptionValueSort { ProductOption = option, DisplayOrder = data.DisplayOrder, Value = data.Value }; session.Save(existingSort); } }); }
public List <ProductOptionValueSortingData> GetOptions(ProductOption productOption) { ProductOption productOptionAlias = null; List <ProductOptionValue> productOptionValues = _session.QueryOver <ProductOptionValue>() .JoinAlias(value => value.ProductOption, () => productOptionAlias) .Where(() => productOptionAlias.Id == productOption.Id) .Cacheable().List().DistinctBy(value => value.Value).ToList(); IList <ProductOptionValueSort> productOptionValueSorts = GetProductOptionValueSorts(productOption); return(productOptionValues .Select(value => { ProductOptionValueSort order = productOptionValueSorts.FirstOrDefault(sort => sort.Value == value.Value); return new ProductOptionValueSortingData { Value = value.Value, DisplayOrder = order == null ? productOptionValues.Count() : order.DisplayOrder }; }).OrderBy(data => data.DisplayOrder).ThenBy(data => data.Value).ToList()); }