protected DataFilter CreateDataFilter(IDataObject parentDataObject, string relatedObjectType) { string objectType = parentDataObject.GetType().Name; if (objectType == typeof(GenericDataObject).Name) { objectType = ((GenericDataObject)parentDataObject).ObjectType; } DataDictionary dataDictionary = GetDictionary(); DataObject dataObject = dataDictionary.dataObjects.Find(c => c.objectName.ToLower() == objectType.ToLower()); if (dataObject == null) { throw new Exception("Parent data object [" + objectType + "] not found."); } DataRelationship dataRelationship = dataObject.dataRelationships.Find(c => c.relatedObjectName.ToLower() == relatedObjectType.ToLower()); if (dataRelationship == null) { throw new Exception("Relationship between data object [" + objectType + "] and related data object [" + relatedObjectType + "] not found."); } List <Expression> expressions = CreateRelatedFilterExpressions(parentDataObject, dataRelationship); DataFilter filter = new DataFilter() { Expressions = expressions }; return(filter); }
protected DataFilter CreateRelatedDataFilter(DataRow parentDataRow, string relatedTableName) { DataObject parentDataObject = _dbDictionary.dataObjects.Find(x => x.tableName == parentDataRow.Table.TableName); if (parentDataObject == null) { throw new Exception("Parent data table [" + parentDataRow.Table.TableName + "] not found."); } DataObject relatedDataObject = _dbDictionary.dataObjects.Find(x => x.tableName == relatedTableName); if (relatedDataObject == null) { throw new Exception("Related data table [" + relatedTableName + "] not found."); } DataRelationship dataRelationship = parentDataObject.dataRelationships.Find(c => c.relatedObjectName.ToLower() == relatedDataObject.objectName.ToLower()); if (dataRelationship == null) { throw new Exception("Relationship between data table [" + parentDataRow.Table.TableName + "] and related data table [" + relatedTableName + "] not found."); } DataFilter filter = new DataFilter(); foreach (PropertyMap propertyMap in dataRelationship.propertyMaps) { DataProperty parentDataProperty = parentDataObject.dataProperties.Find(x => x.propertyName.ToLower() == propertyMap.dataPropertyName.ToLower()); DataProperty relatedDataProperty = relatedDataObject.dataProperties.Find(x => x.propertyName.ToLower() == propertyMap.relatedPropertyName.ToLower()); Expression expression = new Expression() { PropertyName = relatedDataProperty.propertyName, RelationalOperator = RelationalOperator.EqualTo, Values = new Values { parentDataRow[parentDataProperty.columnName].ToString() } }; if (filter.Expressions.Count > 0) { expression.LogicalOperator = LogicalOperator.And; } filter.Expressions.Add(expression); } return(filter); }
protected List <Expression> CreateRelatedFilterExpressions(IDataObject parentDataObject, DataRelationship dataRelationship) { List <Expression> expressions = new List <Expression>(); foreach (PropertyMap propertyMap in dataRelationship.propertyMaps) { Expression expression = new Expression() { PropertyName = propertyMap.relatedPropertyName, RelationalOperator = RelationalOperator.EqualTo, Values = new Values { parentDataObject.GetPropertyValue(propertyMap.dataPropertyName).ToString() } }; if (expressions.Count > 0) { expression.LogicalOperator = LogicalOperator.And; } expressions.Add(expression); } return(expressions); }