using System; using System.Collections.Generic; using System.Linq.Expressions; using Tanshu.Accounts.Entities; using NHibernate; using NHibernate.Criterion; using NHibernate.Transform; namespace Tanshu.Accounts.Repository { public class ProductGroupBI : UnitOfWork { public new IList List() { return _session.QueryOver() .OrderBy(x => x.SortOrder).Asc .ThenBy(x => x.Name).Asc .List(); } public new IList List(Expression> query) { _session.FlushMode = FlushMode.Never; return _session.QueryOver() .Where(query) .OrderBy(x => x.SortOrder).Asc .ThenBy(x => x.Name).Asc .List(); } public IList SaleList() { ProductGroup pgAlias = null; Product pAlias = null; ICriterion isActive = Restrictions.Where(x => x.IsActive); return _session.QueryOver(() => pgAlias) .Left.JoinAlias(x => x.Products, () => pAlias, isActive) .Where(x => x.IsActive) .OrderBy(x => x.SortOrder).Asc .ThenBy(x => x.Name).Asc .ThenBy(() => pAlias.SortOrder).Asc .ThenBy(() => pAlias.Name).Asc .TransformUsing(Transformers.DistinctRootEntity) .List(); } public IList GetProductGroupTypes() { const string query = @"select distinct(pg.GroupType) from ProductGroup pg order by pg.GroupType"; var hnq = _session.CreateQuery(query); return hnq.List(); } public ProductGroup GetProductGroupOfProduct(Guid productID) { using (var session = SessionManager.Session) { var item = (from p in session.QueryOver() where p.ProductID == productID select p.ProductGroup).SingleOrDefault(); NHibernateUtil.Initialize(item); return item; } } public void UpdateSortOrder(IList list) { for (int i = 0; i < list.Count; i++) { var item = list[i]; var productGroup = _session.Get(item.ProductGroupID); productGroup.SortOrder = i; _session.Update(productGroup); } } } }