Example #1
0
        public IEnumerable <T> Select(QItemList <QParam> parameters, IEnumerable <T> list = null)
        {
            IEnumerable <T> buffer = null;

            for (int i = 0; i < parameters.Count; i++)
            {
                QParam param = parameters[i];
                if (buffer != null && param.Logic.Type == LogicTypes.And)
                {
                    if (!buffer.Any())
                    {
                        break;
                    }
                    list = buffer;
                }
                var temp = Select(param, list);

                if (buffer == null)
                {
                    buffer = temp;
                }
                else if (param.Logic.Type == LogicTypes.Undefined)
                {
                    buffer = buffer.Concat(temp);
                }
                else if (param.Logic.Type == LogicTypes.Or)
                {
                    buffer = param.Logic.Not
                               ? buffer.Except(temp)
                               : buffer.Union(temp);
                }
                else if (param.Logic.Type == LogicTypes.And)
                {
                    buffer = param.Logic.Not
                               ? buffer.Except(temp).Union(temp.Except(buffer))
                               : buffer.Intersect(temp);
                }
            }

            return(buffer);
        }
Example #2
0
 public QParam() : base()
 {
     values = new QItemList <QItem>(this);
 }
Example #3
0
 public QEnum()
 {
     Items = new QItemList <QItem>();
 }