// Das ist immernoch mit Kanonen auf Spatzen. Zur Zeit ist nur fuer Track.Property.Bpm u. .Year left join erwuenscht... private static void loadJunctions(Junction junction, ARelation aRelation, ISet<string> aliases, ICriteria criteria) { if(aRelation is ComplexRelation) { Junction newJunction = aRelation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction; foreach(ARelation relatum in aRelation.Relata) TrackSearch_Service.loadJunctions(newJunction, relatum, aliases, criteria); junction.Add(newJunction); } else { // if( aRelation is ASimpleRelation) ASimpleRelation aSimpleRelation = aRelation as ASimpleRelation; AbstractCriterion abstractCriterion; if(aSimpleRelation is SimpleRelation<string>) { if(aliases.Add(aSimpleRelation.Alias)) criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias); abstractCriterion = new InsensitiveLikeExpression( aSimpleRelation.SearchProperty, ((StringSearch)aSimpleRelation).Relatum, MatchMode.Anywhere); } else if(aSimpleRelation is SimpleRelation<int>) { if(aliases.Add(aSimpleRelation.Alias)) criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin); abstractCriterion = new EqExpression( aSimpleRelation.SearchProperty, ((IntSearch)aSimpleRelation).Relatum); } else if( aSimpleRelation is Between_String ) { if(aliases.Add(aSimpleRelation.Alias)) criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin); abstractCriterion = new BetweenExpression( aSimpleRelation.SearchProperty, ((Between_String)aSimpleRelation).Phrase1, ((Between_String)aSimpleRelation).Phrase2); } else if( aSimpleRelation is Between_Int ) { if(aliases.Add(aSimpleRelation.Alias)) criteria.CreateAlias(aSimpleRelation.AssociationPath, aSimpleRelation.Alias, JoinType.LeftOuterJoin); abstractCriterion = new BetweenExpression( aSimpleRelation.SearchProperty, ((Between_Int)aSimpleRelation).Phrase1, ((Between_Int)aSimpleRelation).Phrase2); } else { // if(aSimpleRelation is SimpleRelation<Ending.Attribute>) { abstractCriterion = new EqExpression( Track.Property.Ending.ToString(), new Ending(((EndingAttributeSearch)aSimpleRelation).Relatum)); } if(aSimpleRelation.UnaryRelator == Relator.Unary.NOT) abstractCriterion = Expression.Not(abstractCriterion); // else // if(aSimpleRelation.UnaryRelator == Relator.Unary.IS) junction.Add(abstractCriterion); } }
/// <summary> /// Without explicit sorting. /// </summary> public static IList<Track> getTrackListing(ARelation relation) { ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(Track)); ISet<string> aliases = new HashedSet<string>(); Junction junction = relation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction; foreach(ARelation relatum in relation.Relata) TrackSearch_Service.loadJunctions(junction, relatum, aliases, criteria); return criteria.Add(junction).List<Track>(); }
/// <summary> /// With explicit sorting. /// </summary> public static IList<Track> getTrackListing(ARelation relation, Track.Property sortExpression, SortDirection sortDirection) { ICriteria criteria = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof(Track)); ISet<string> aliases = new HashedSet<string>(); Junction junction = relation.BinaryRelator == Relator.Binary.AND ? new Conjunction() : new Disjunction() as Junction; foreach(ARelation relatum in relation.Relata) TrackSearch_Service.loadJunctions(junction, relatum, aliases, criteria); criteria.Add(junction); if(!aliases.Contains(sortExpression.ToString().ToLower())) criteria.CreateAlias(sortExpression.ToString(), sortExpression.ToString().ToLower()); Order order; if(sortDirection == SortDirection.Ascending) order = Order.Asc(String.Format("{0}.{1}", sortExpression.ToString().ToLower(), Track.getChildPropertyAsString(sortExpression))); else order = Order.Desc(String.Format("{0}.{1}", sortExpression.ToString().ToLower(), Track.getChildPropertyAsString(sortExpression))); criteria.AddOrder(order); return criteria.List<Track>(); }
public static void setActiveSearchRelation(HttpSessionState session, ARelation value) { set(SessionKey.SearchRelation, session, value); }