public bool CheckItem(object item, object typedValue, CompareType comparer, IComparer comparision) { return(ListHelper.CheckItem(GetValue(item), typedValue, comparer, comparision)); }
public static bool CheckItem(object x, object y, CompareType compare, IComparer comparer) { bool result = false; if (compare.Type == CompareTypes.Equal) { result = Equal(x, y, false) ? !compare.Not : compare.Not; } else if (compare.Type == CompareTypes.Is) { result = compare.Not ? (x != null && x != DBNull.Value) : (x == null || x == DBNull.Value); } else if (x != null && y != null && compare.Type == CompareTypes.Like) { y = y.ToString().Trim(new char[] { '%' }); if (x.ToString().IndexOf((string)y, 0, StringComparison.OrdinalIgnoreCase) >= 0) { result = !compare.Not; } else { result = compare.Not; } } else if (compare.Type == CompareTypes.In) { if (!(x is string) && x is IEnumerable xlist) { x = y; y = xlist; } object val = x; if (y is string) { y = ((string)y).Split(','); } if (y is IEnumerable list) { foreach (object item in list) { if (item is string && !(val is string)) { val = x == null ? string.Empty : x.ToString(); } if (Equals(item, val)) { result = true; break; } } if (compare.Not) { result = !result; } } else if (y is Enum && x is Enum) { result = ((int)y & (int)x) != 0; if (compare.Not) { result = !result; } } } else if (compare.Type == CompareTypes.Contains) { if (x is IList xList) { result = xList.Contains(y); } else if (x is IEnumerable <object> xEnumerableObject) { result = xEnumerableObject.Contains(y); } else if (x is IEnumerable xEnumerable) { result = Contains(xEnumerable, y); } if (compare.Not) { result = !result; } } else if (compare.Type == CompareTypes.Intersect) { if (x is IEnumerable <object> xEnumerableObject && y is IEnumerable <object> yEnumerableObject) { result = xEnumerableObject.Intersect(yEnumerableObject).Any(); } if (x is IEnumerable xEnumerable && y is IEnumerable yEnumerable) { result = Intersect(xEnumerable, yEnumerable).Any(); } if (compare.Not) { result = !result; } } else { int i = Compare(x, y, comparer, false); switch (compare.Type) { case CompareTypes.Greater: result = i > 0; break; case CompareTypes.Less: result = i < 0; break; case CompareTypes.GreaterOrEqual: result = i >= 0; break; case CompareTypes.LessOrEqual: result = i <= 0; break; } } return(result); }
public static IEnumerable Search(IEnumerable items, IInvoker invoker, object value, CompareType compare, IComparer comparer) { foreach (var item in items) { if (CheckItem(invoker.GetValue(item), value, compare, comparer)) { yield return(item); } } }
public override bool CheckItem(T item, object typedValue, CompareType comparer, IComparer comparision) { return(ListHelper.CheckItemN <V>(GetValue(item), typedValue, comparer, (IComparer <V?>)comparision));// }