private static void AppendCharacteristicName(this IFacetsBuilder <Entities.Product> facetsBuilder, string name) { string paramName = facetsBuilder.GetParamName(); facetsBuilder.AppendText("$char/name = sql:variable(\""); facetsBuilder.AppendText(paramName); facetsBuilder.AppendText("\")"); facetsBuilder.AddParameter(paramName, name); }
public static IFacetsBuilder <Entities.Product> AndCharacteristics(this IFacetsBuilder <Entities.Product> facetsBuilder, IDictionary <string, HashSet <string> > characteristics) { if (characteristics == null) { return(facetsBuilder); } characteristics = characteristics .Where(c => !string.IsNullOrWhiteSpace(c.Key) && c.Value.Any(v => !string.IsNullOrWhiteSpace(v)) ) .Select(c => new KeyValuePair <string, HashSet <string> > ( c.Key, c.Value.Where(v => !string.IsNullOrWhiteSpace(v)).ToHashSet() ) ) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); if (!characteristics.Any()) { return(facetsBuilder); } string propertyId = facetsBuilder.EntityDescription .EntityProperties[typeof(Entities.Product).GetProperty(nameof(Entities.Product.Character))]; facetsBuilder.AppendText(" AND ") .AppendText(propertyId) .AppendText(".value('count(for $char in //characteristic where "); int count = 0; int lastIndex = characteristics.Count - 1; foreach (var(name, values) in characteristics) { facetsBuilder.AppendCharacteristicName(name); facetsBuilder.AppendCharacteristicIn(values); if (count >= lastIndex) { break; } facetsBuilder.AppendText(" and "); count++; } facetsBuilder.AppendText(" return 0)', 'int') > 0"); return(facetsBuilder); }
private static void AppendCharacteristicIn(this IFacetsBuilder <Entities.Product> facetsBuilder, ICollection <string> values) { facetsBuilder.AppendText(" and $char/value = ("); int count = 0; int lastIndex = values.Count - 1; foreach (string value in values) { string paramName = facetsBuilder.GetParamName(); facetsBuilder.AppendText("sql:variable(\""); facetsBuilder.AppendText(paramName); facetsBuilder.AppendText("\")"); facetsBuilder.AddParameter(paramName, value); if (count >= lastIndex) { break; } facetsBuilder.AppendText(","); count++; } facetsBuilder.AppendText(")"); }