private void CreateMultipleScopeFilter(FilterBuilder builder) { builder.Relation("Scope", projects); var metaModel = builder.Instance.ApiClient.MetaModel; var epicType = metaModel.GetAssetType("Epic"); var scopeAttribute = epicType.GetAttributeDefinition("Scope"); var scopeTerm = new FilterTerm(scopeAttribute); scopeTerm.Operate(FilterTerm.Operator.Equal, projects.Select(x => x.ToString()).Cast<object>().ToArray()); var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp").Filter(scopeTerm); var superAndUpTerm = builder.Root.Term(superAndUpAttribute); superAndUpTerm.NotExists(); }
//public void Execute( public FreeQuery( string assetTypeName, object[] select = null, IEnumerable<Tuple<string, object, FilterTerm.Operator>> where = null, Action<IEnumerable<AssetClassBase>> success = null, Action<Exception> error = null ) { if (success == null) { throw new ArgumentNullException("success"); } if (error == null) { throw new ArgumentNullException("error"); } try { var query = new Query(MetaModelProvider.Meta.GetAssetType(assetTypeName)); var attributes = new List<IAttributeDefinition>(); if (select != null) { attributes.AddRange( select.Select( m => MetaModelProvider.Meta.GetAttributeDefinition(assetTypeName + "." + m.ToString()))); } query.Selection.AddRange(attributes); if (where != null) { var andTerms = new List<FilterTerm>(); foreach (var tuple in where) { var attribute = MetaModelProvider.Meta.GetAttributeDefinition(assetTypeName + "." + tuple.Item1); var item = tuple.Item2; var term = new FilterTerm(attribute); term.Operate(tuple.Item3, item); andTerms.Add(term); } var andTerm = new AndFilterTerm(andTerms.ToArray()); query.Filter = andTerm; } var list = new List<AssetClassBase>(); var result = ServicesProvider.Services.Retrieve(query); if (result.Assets.Count == 0) { success(list); } list.AddRange(result.Assets.Select(a => new AssetClassBase(a, assetTypeName))); success(list); } catch (Exception exception) { error(exception); } //var task = new TaskFactory<List<AssetClassBase>>().StartNew(() => // { // var result = ServicesProvider.Services.Retrieve(query); // if (result.Assets.Count == 0) // { // return list; // } // list.AddRange( // result.Assets.Select( // a => new AssetClass(a, assetTypeName))); // return list; // }); }
public FluentQuery Execute(Action<IEnumerable<AssetClassBase>> successCallback = null) { if (OnSuccess == null && successCallback == null) { throw new NullReferenceException("Must specify the OnSuccess callback before calling Execute or pass it directly to Execute as a parameter"); } try { var attributes = new List<IAttributeDefinition>(); if (SelectFields.Count > 0) { attributes.AddRange( SelectFields.Select( m => MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName + "." + m.ToString()))); } RawQuery.Selection.AddRange(attributes); if (WhereCriteria.Count > 0) { var andTerms = new List<FilterTerm>(); foreach (var tuple in WhereCriteria) { var attribute = MetaModelProvider.Meta.GetAttributeDefinition(AssetTypeName + "." + tuple.Item1); var item = tuple.Item2; var term = new FilterTerm(attribute); term.Operate(tuple.Item3, item); andTerms.Add(term); } var andTerm = new AndFilterTerm(andTerms.ToArray()); RawQuery.Filter = andTerm; } var list = new List<AssetClassBase>(); var result = ServicesProvider.Services.Retrieve(RawQuery); if (result.Assets.Count == 0) { OnSuccess(list); } list.AddRange(result.Assets.Select(a => new AssetClassBase(a, AssetTypeName))); if (list.Count == 0 && OnEmptyResults != null) { OnEmptyResults(); } if (successCallback != null) { successCallback(list); } else { OnSuccess(list); } } catch (Exception exception) { if (OnError != null) { OnError(exception); } else { throw; } } return this; }