private string GetBooleanFilterAsString(APISearchTerm term) { string filter = ""; string not = ""; string value = ""; switch (term.op) { case APISearch.SearchComparer.eq: foreach (string v in term.values) { if (filter != "") { filter += " OR "; } value = (v.ToLower() == "true") ? "1" : "0"; not = term.not ? "<>" : "="; filter += $" ({term.field} {not} {value}) "; } break; } return(filter); }
private string GetDecimalNumberFilterAsString(APISearchTerm term) { string filter = ""; string not = ""; switch (term.op) { case APISearch.SearchComparer.between: if (term.values.Count == 2) { not = term.not ? "not" : ""; filter += $" ({term.field} {not} between {term.values[0]} and {term.values[1]} ) "; } break; case APISearch.SearchComparer.eq: not = term.not ? "<>" : "="; filter += $" ({term.field} {not} {term.values[0]}) "; break; case APISearch.SearchComparer.gt: not = term.not ? "<=" : ">"; filter += $" ({term.field} {not} {term.values[0]}) "; break; case APISearch.SearchComparer.gte: not = term.not ? "<" : ">="; filter += $" ({term.field} {not} {term.values[0]}) "; break; case APISearch.SearchComparer.lt: not = term.not ? ">=" : "<"; filter += $" ({term.field} {not} {term.values[0]}) "; break; case APISearch.SearchComparer.lte: not = term.not ? ">" : "<="; filter += $" ({term.field} {not} {term.values[0]}) "; break; } return(filter); }
private string GetFilterAsString(APISearchTerm term, int offset, bool datetimeasdate) { string filter = ""; switch (term.type) { case DataType.date: filter = GetDateFilterAsString(term, offset); break; case DataType.datetime: filter = GetDatetimeFilterAsString(term, offset, datetimeasdate); break; case DataType.time: filter = GetTimeFilterAsString(term); break; case DataType.decimal_number: filter = GetDecimalNumberFilterAsString(term); break; case DataType.integer_number: filter = GetIntegerNumberFilterAsString(term); break; case DataType.boolean: filter = GetBooleanFilterAsString(term); break; case DataType.text: filter = GetTextFilterAsString(term); break; } return(filter); }
private string GetDateFilterAsString(APISearchTerm term, int offset) { string filter = ""; string not = ""; DateTime d1 = DateTime.UtcNow; DateTime d2 = DateTime.UtcNow; if (term.values.Count == 2) { d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind); d2 = DateTime.Parse(term.values[1], null, System.Globalization.DateTimeStyles.RoundtripKind); } else { d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind); } DateTimeOffset do1 = new DateTimeOffset(d1, new TimeSpan(offset, 0, 0)); DateTimeOffset do2 = new DateTimeOffset(d2, new TimeSpan(offset, 0, 0)); switch (term.op) { case APISearch.SearchComparer.between: if (term.values.Count == 2) { not = term.not ? "not" : ""; filter += $" ({term.field} {not} between '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}' and '{do2.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}' ) "; } break; case APISearch.SearchComparer.eq: not = term.not ? "<>" : "="; filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.gt: not = term.not ? "<=" : ">"; filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.gte: not = term.not ? "<" : ">="; filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.lt: not = term.not ? ">=" : "<"; filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.lte: not = term.not ? ">" : "<="; filter += $" ({term.field} {not} '{do1.ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss")}') "; break; } return(filter); }
private string GetTimeFilterAsString(APISearchTerm term) { string filter = ""; string not = ""; DateTime d1 = DateTime.UtcNow; DateTime d2 = DateTime.UtcNow; if (term.values.Count == 2) { d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind); d2 = DateTime.Parse(term.values[1], null, System.Globalization.DateTimeStyles.RoundtripKind); d1 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second); d2 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second); } else { d1 = DateTime.Parse(term.values[0], null, System.Globalization.DateTimeStyles.RoundtripKind); d1 = new DateTime(2001, 1, 1, d1.Hour, d1.Minute, d1.Second); } switch (term.op) { case APISearch.SearchComparer.between: if (term.values.Count == 2) { not = term.not ? "not" : ""; filter += $" ({term.field} {not} between '{d1.ToString("yyyy/MM/dd HH:mm:ss")}' and '{d2.ToString("yyyy/MM/dd HH:mm:ss")}' ) "; } break; case APISearch.SearchComparer.eq: not = term.not ? "<>" : "="; filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.gt: not = term.not ? "<=" : ">"; filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.gte: not = term.not ? "<" : ">="; filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.lt: not = term.not ? ">=" : "<"; filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') "; break; case APISearch.SearchComparer.lte: not = term.not ? ">" : "<="; filter += $" ({term.field} {not} '{d1.ToString("yyyy/MM/dd HH:mm:ss")}') "; break; } return(filter); }
private string GetTextFilterAsString(APISearchTerm term) { string filter = ""; string not = ""; switch (term.op) { case APISearch.SearchComparer.contains: foreach (string v in term.values) { if (filter != "") { filter += " OR "; } not = term.not ? "not" : ""; filter += $" ({term.field} {not} like '%{v}%') "; } break; case APISearch.SearchComparer.ends: foreach (string v in term.values) { if (filter != "") { filter += " OR "; } not = term.not ? "not" : ""; filter += $" ({term.field} {not} like '%{v}') "; } break; case APISearch.SearchComparer.eq: foreach (string v in term.values) { if (filter != "") { filter += " OR "; } not = term.not ? "<>" : "="; filter += $" ({term.field} {not} '{v}') "; } break; case APISearch.SearchComparer.@in: string inf = ""; foreach (string v in term.values) { inf += $"'{inf}',"; } inf = inf.TrimEnd(','); not = term.not ? "not" : "="; filter += $" ({term.field} {not} in '{inf}') "; break; case APISearch.SearchComparer.starts: foreach (string v in term.values) { if (filter != "") { filter += " OR "; } not = term.not ? "not" : "="; filter += $" ({term.field} {not} like '{v}%') "; } break; } return(filter); }
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { List <string> ConditionFields = new List <string>() { "n", "o", "v", "t" }; APISearch search = new APISearch(); bindingContext.Model = search; string ct = actionContext.Request.Content.ReadAsStringAsync().Result; List <string> parameters = actionContext.Request.RequestUri.Query.TrimStart('?').Split('&').ToList(); foreach (string p in parameters) { List <string> par = p.Split('=').ToList(); switch (par[0].ToLower()) { case "p": search.page = int.Parse(par[1]); break; case "g": search.gmt = par[1]; break; case "l": search.lang = par[1]; break; case "ps": search.pagesize = int.Parse(par[1]); break; case "s": search.sortby = par[1]; break; case "d": search.sortdirection = par[1]; break; case "dd": search.datetimeasdate = (par[1].ToLower() == "true") ? true : false; break; case "gd": search.ShowDeleted = (par[1].ToLower() == "true") ? true : false; break; default: if (par[0].StartsWith("f")) { string idx = par[0].Replace("f", ""); bool complete = true; APISearchTerm term = new APISearchTerm(); term.field = par[1]; foreach (string c in ConditionFields) { string param = parameters.Where(x => x.StartsWith(c + idx)).Take(1).SingleOrDefault(); if (param != null) { List <string> condpar = param.Split('=').ToList(); switch (c) { case "n": term.not = condpar[1].ToLower() == "true" ? true: false; break; case "o": term.op = (APISearch.SearchComparer) int.Parse(condpar[1]); break; case "v": term.values = condpar[1].Split(',').ToList(); break; case "t": term.type = (Domain.Shared.DataType) int.Parse(condpar[1]); break; } } else { complete = false; break; } } if (complete) { search.filters.Add(term); } } break; } } return(true); }