private Criteria CreateCriteriaForRelationship(MemberInfo memberInfo, Criteria.ComparisonOp comparisonOp, object finalValue) { var relationshipName = memberInfo.Name; var classDef = ClassDefCol.GetColClassDef()[memberInfo.DeclaringType]; var relationshipDef = classDef.GetRelationship(relationshipName); var relatedObject = finalValue as IBusinessObject; Criteria criteria = null; var logicalOp = comparisonOp == Criteria.ComparisonOp.Equals ? Criteria.LogicalOp.And : Criteria.LogicalOp.Or; foreach (var relPropDef in relationshipDef.RelKeyDef) { var propertyCriteria = new Criteria( relationshipName + "." + relPropDef.OwnerPropertyName, comparisonOp, relatedObject.GetPropertyValue(relPropDef.RelatedClassPropName) ); if (criteria == null) { criteria = propertyCriteria; } else { criteria = new Criteria(criteria, logicalOp, propertyCriteria); } } return(criteria); }
/// <summary> /// Returns the existing collection, or creates and returns a /// new empty collection. /// </summary> /// <param name="classDefCol">A loaded collection of class definitions to initialise the collection with</param> /// <returns>A collection of class definitions</returns> public static ClassDefCol LoadColClassDef(ClassDefCol classDefCol) { if (classDefCol == null) { throw new HabaneroArgumentException("classDefCol", "Cannot load a ClassDefCol if it is null."); } if (!_instanceFlag || _classDefcol.Count == 0) { _classDefcol = classDefCol; _instanceFlag = true; } else { foreach (IClassDef classDef in classDefCol) { //ClassDef classDef = (ClassDef)entry.Value; if (!_classDefcol.Contains(classDef)) { _classDefcol.Add(classDef); } } } return(_classDefcol); }