private static void BuildCondition(SqlQuery query, ReportDef report, ReportConditionItemDef item, SqlQueryCondition parentCondition, IDictionary <Guid, SqlQuerySource> mapper, bool isHaving) { var condition = item as ReportConditionDef; if (condition != null) { var source = mapper[condition.LeftAttribute.SourceId]; var reportSource = report.GetSourceDef(condition.LeftAttribute.SourceId); var reportSourceAttr = reportSource.Attributes != null ? reportSource.Attributes.FirstOrDefault(a => a.Id == condition.LeftAttribute.AttributeId) : null; var attr = reportSourceAttr == null?source.GetAttribute(condition.LeftAttribute.AttributeId) : source.GetAttribute(reportSourceAttr.Ident); var attrRef = new SqlQuerySourceAttributeRef(source, attr); var leftPart = new SqlQueryConditionPart(); leftPart.Attributes.Add(attrRef); var rightPart = BuildConditionPart(query, report, condition, mapper); if (parentCondition != null) { parentCondition.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart, CompareOperationConverter.CompareToCondition(condition.Condition), rightPart)); } else if (isHaving) { query.HavingConditions.Add(new SqlQueryCondition(item.Operation, leftPart, CompareOperationConverter.CompareToCondition(condition.Condition), rightPart)); } else { query.Conditions.Add(new SqlQueryCondition(item.Operation, leftPart, CompareOperationConverter.CompareToCondition(condition.Condition), rightPart)); } } else { var expCondition = item as ReportExpConditionDef; if (expCondition != null && expCondition.Conditions != null) { var exp = query.AddExpCondition(item.Operation, parentCondition); foreach (var child in expCondition.Conditions) { BuildCondition(query, report, child, exp, mapper, isHaving); } } } }
private static SqlQueryConditionPart BuildConditionPart(SqlQuery query, ReportDef report, ReportConditionDef condition, IDictionary <Guid, SqlQuerySource> mapper) { if (query == null) { throw new ArgumentNullException("query"); } if (condition == null) { throw new ArgumentNullException("condition"); } var single = condition.RightPart as ReportConditionRightAttributeDef; if (single != null) { var source = mapper[single.Attribute.SourceId]; var reportSource = report.GetSourceDef(single.Attribute.SourceId); var reportSourceAttr = reportSource.Attributes != null ? reportSource.Attributes.FirstOrDefault(a => a.Id == single.Attribute.AttributeId) : null; var attr = reportSourceAttr == null?source.GetAttribute(single.Attribute.AttributeId) : source.GetAttribute(reportSourceAttr.Ident); var attrRef = new SqlQuerySourceAttributeRef(source, attr); var rightPart = new SqlQueryConditionPart(); rightPart.Attributes.Add(attrRef); return(rightPart); } var exp = condition.RightPart as ReportConditionRightParamDef; if (exp != null) { var sqPart = new SqlQueryConditionPart { Params = new[] { new QueryConditionValueDef { Value = exp.Value, Name = exp.Caption } } }; return(sqPart); } throw new ApplicationException("Не могу создать правую часть SqlQuery условия из ReportDef условия"); }