private static void SplitQueryFilter(Filter filter, Table targetTable, string indexName, out Dictionary<string, Condition> keyConditions, out Dictionary<string, Condition> filterConditions) { QueryFilter queryFilter = filter as QueryFilter; if (queryFilter == null) throw new InvalidOperationException("Filter is not of type QueryFilter"); keyConditions = new Dictionary<string, Condition>(); filterConditions = new Dictionary<string, Condition>(); var conditions = filter.ToConditions(targetTable.Conversion); foreach (var kvp in conditions) { string attributeName = kvp.Key; Condition condition = kvp.Value; // depending on whether the attribute is key, place either in keyConditions or filterConditions if (IsKeyAttribute(targetTable, indexName, attributeName)) keyConditions[attributeName] = condition; else filterConditions[attributeName] = condition; } }
/// <summary> /// Creates a Filter from a conditions map /// </summary> /// <param name="conditions">Map from attribute name to condition</param> /// <returns>Equivalent Filter</returns> public static Filter FromConditions(Dictionary<string, Condition> conditions) { Filter ret = new Filter(); ret.Conditions = conditions; return ret; }
/// <summary> /// Creates a Filter from a conditions map /// </summary> /// <param name="conditions">Map from attribute name to condition</param> /// <returns>Equivalent Filter</returns> public static Filter FromConditions(Dictionary<string, Condition> conditions) { Filter ret = new Filter(); foreach(var kvp in conditions) { string name = kvp.Key; Condition condition = kvp.Value; ret.Conditions.Add(name, new FilterCondition(condition)); } return ret; }