示例#1
0
 public bool CheckItem(object item, object typedValue, CompareType comparer, IComparer comparision)
 {
     return(ListHelper.CheckItem(GetValue(item), typedValue, comparer, comparision));
 }
示例#2
0
        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);
        }
示例#3
0
 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);
         }
     }
 }
示例#4
0
 public override bool CheckItem(T item, object typedValue, CompareType comparer, IComparer comparision)
 {
     return(ListHelper.CheckItemN <V>(GetValue(item), typedValue, comparer, (IComparer <V?>)comparision));//
 }