// moteda sprawdzajaca czy w podanym searchQuery ma zasosowanie filtr, jesli tak to podaje ktorego pola i wartosci filtr dotyczy public bool CheckStringForBeingApplied(string searchQuery, out string fieldName, out string value) { fieldName = ""; value = ""; if (!(searchQuery.Length > 0)) { return(false); } string[] words = searchQuery.Trim().Split(new char[] { ' ' }); foreach (string s in words) { if (s.Trim().ToUpper().StartsWith(SearchKey.ToUpper() + Delimiter)) { foreach (var prop in (typeof(T)).GetProperties()) { if (prop.Name == FieldName) { value = s.Trim().Remove(0, (SearchKey + Delimiter).Length); fieldName = FieldName; return(true); } } } } return(false); }
public override void ExecuteFilter(ref IQueryable <T> query, ref string searchQuery) { string Field = ""; //string Value = ""; if (CheckStringForBeingApplied(searchQuery, out Field, out SearchValue)) { ParameterExpression parameter = Expression.Parameter(typeof(T), "x"); Expression property = Expression.Property(parameter, Field); Expression target = Expression.Constant(SearchValue /*.ToUpper()*/, typeof(string)); MethodInfo mi = typeof(string).GetMethod("Contains", new Type[] { typeof(string) }); Expression equalsMethod = Expression.Call(property, mi, target); Expression <Func <T, bool> > lambda = Expression.Lambda <Func <T, bool> >(equalsMethod, parameter); query = query.Where(lambda); Executed = true; int iStart = searchQuery.ToUpper().IndexOf(SearchKey.ToUpper() + Delimiter + SearchValue.ToUpper()); int iLen = (SearchKey + Delimiter + SearchValue).Length; searchQuery = searchQuery.Remove(iStart, iLen).Trim(); } }