public static SqlQueryAttribute BuildAttribute(SqlQuery query, QueryAttributeDef attrDef) { if (query == null) { throw new ArgumentNullException("query"); } if (attrDef == null) { throw new ArgumentNullException("attrDef"); } var single = attrDef as QuerySingleAttributeDef; if (single != null) { var source = query.FindSource(single.Attribute.Source); return(single.Attribute.AttributeId != Guid.Empty ? query.GetAttribute(source, single.Attribute.AttributeId) : query.GetAttribute(source, single.Attribute.AttributeName)); } var exp = attrDef as QueryExpAttributeDef; if (exp != null) { var attrRefs = new List <SqlQuerySourceAttributeRef>(); foreach (var attribute in exp.Attributes) { var source = query.FindSource(attribute.Source); var attr = attribute.AttributeId != Guid.Empty ? source.GetAttribute(attribute.AttributeId) : source.GetAttribute(attribute.AttributeName); var attrRef = new SqlQuerySourceAttributeRef(source, attr); attrRefs.Add(attrRef); } return(query.AddAttribute(attrRefs, exp.Expression)); } return(null); }
private static SqlQueryConditionPart BuildConditionPart(SqlQuery query, QueryConditionPartDef part, IDataContext dataContext) { if (query == null) { throw new ArgumentNullException("query"); } if (part == null) { throw new ArgumentNullException("part"); } var single = part.Attribute as QuerySingleAttributeDef; if (single != null) { var source = query.FindSource(single.Attribute.Source); var attr = single.Attribute.AttributeId != Guid.Empty ? source.GetAttribute(single.Attribute.AttributeId) : source.GetAttribute(single.Attribute.AttributeName); var attrRef = new SqlQuerySourceAttributeRef(source, attr); var sqPart = new SqlQueryConditionPart(); sqPart.Attributes.Add(attrRef); return(sqPart); } var exp = part.Attribute as QueryExpAttributeDef; if (exp != null) { var sqPart = new SqlQueryConditionPart { Expression = exp.Expression }; foreach (var attribute in exp.Attributes) { var source = query.FindSource(attribute.Source); var attr = attribute.AttributeId != Guid.Empty ? source.GetAttribute(attribute.AttributeId) : source.GetAttribute(attribute.AttributeName); var attrRef = new SqlQuerySourceAttributeRef(source, attr); sqPart.Attributes.Add(attrRef); } return(sqPart); } var sub = part.Attribute as QuerySubAttributeDef; if (sub != null && sub.SubQuery != null) { var sqlSub = Build(dataContext, sub.SubQuery.QueryDef); var sqPart = new SqlQueryConditionPart { SubQuery = sqlSub, SubQueryAttribute = BuildAttribute(sqlSub, sub.SubQueryAttribute) }; return(sqPart); } if (part.SubQuery != null) { var sqlSub = Build(dataContext, part.SubQuery.QueryDef); var sqPart = new SqlQueryConditionPart { SubQuery = sqlSub, SubQueryAttribute = BuildAttribute(sqlSub, part.Attribute) }; return(sqPart); } return(new SqlQueryConditionPart { Params = part.Params }); }