private IEnumerable <SparqlQuery> GetRemoteQueries(SparqlEvaluationContext context, ISet[] bindings) { if (bindings.Length == 0) { // No pre-bound variables/BINDINGS clause so just return the query yield return(GetRemoteQuery(context)); } else { // Split bindings in chunks and inject them foreach (var chunk in bindings.ChunkBy(100)) { var vars = chunk.SelectMany(x => x.Variables).Distinct(); var data = new BindingsPattern(vars); foreach (var set in chunk) { var tuple = new BindingTuple( new List <string>(set.Variables), new List <PatternItem>(set.Values.Select(x => new NodeMatchPattern(x)))); data.AddTuple(tuple); } var sparqlQuery = GetRemoteQuery(context); sparqlQuery.RootGraphPattern.AddInlineData(data); yield return(sparqlQuery); } } }
/// <summary> /// Creates a new Set from a Binding Tuple /// </summary> /// <param name="tuple">Tuple</param> internal Set(BindingTuple tuple) { this._values = new Dictionary <string, INode>(); foreach (KeyValuePair <String, PatternItem> binding in tuple.Values) { this.Add(binding.Key, tuple[binding.Key]); } }