/* * private static void IncludeAttribute(IQueryExpression query, DocAttribute attr) * { * var exp = query.And(attr.AttrDef.Name); * * foreach (var sub in attr.Document.Attributes) * { * if (sub is DocAttribute) * { * if (((DocAttribute) sub).Document != null && HasDocumentValue(((DocAttribute) sub).Document)) * { * IncludeAttribute(exp, (DocAttribute) sub); * } * } * else if (sub is DocListAttribute) * { * // if (((DocListAttribute)attr).AddedDocIds != null) * } * else if (sub.ObjectValue != null) * { * if (sub is TextAttribute) * { * exp.Include(sub.AttrDef.Name).Contains(sub.ObjectValue.ToString()); * } * else * { * exp.Include(sub.AttrDef.Name).Eq(sub.ObjectValue); * } * } * } * } */ private static void IncludeAttribute(IQueryCondition cond, DocAttribute attr) { foreach (var sub in attr.Document.Attributes) { if (sub is DocAttribute) { if (((DocAttribute)sub).Document != null && HasDocumentValue(((DocAttribute)sub).Document)) { IncludeAttribute(cond.Include(sub.AttrDef.Name), (DocAttribute)sub); } } else if (sub is DocListAttribute) { // if (((DocListAttribute)attr).AddedDocIds != null) } else if (sub.ObjectValue != null) { if (sub is TextAttribute) { var txt = ((TextAttribute)sub).Value; if (!String.IsNullOrEmpty(txt)) { cond.Include(sub.AttrDef.Name).Contains(txt); } } else { cond.Include(sub.AttrDef.Name).Eq(sub.ObjectValue); } } } }
private static void IncludeDocControl(IQueryCondition cond, AttrDef attr, BizControl control) { // var exp = query.And(attr.Name); if (attr.DocDefType == null) { throw new ApplicationException(String.Format("Не могу сформировать запрос! Атрибут \"{0}\" не ссылается на класс документа", attr.Name)); } var docDef = attr.DocDefType; foreach (var ctrl in control.Children) { if (!(ctrl is BizDataControl) || ((BizDataControl)ctrl).AttributeDefId == null) { continue; } var attributeDefId = ((BizDataControl)ctrl).AttributeDefId; if (attributeDefId != null) { var attrId = (Guid)attributeDefId; var sub = docDef.Attributes.FirstOrDefault(a => a.Id == attrId); if (sub != null) { if (ctrl is BizDocumentControl) { IncludeDocControl(cond, sub, ctrl); continue; } if (((BizDataControl)ctrl).ObjectValue == null) { continue; } if (sub.Type.Id == (short)CissaDataType.Text) { var txt = ((BizDataControl)ctrl).ObjectValue.ToString(); if (!String.IsNullOrEmpty(txt)) { cond.Include(sub.Name).Contains(txt); } } else { cond.Include(sub.Name).Eq(((BizDataControl)ctrl).ObjectValue); } } } } }