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); }
public QParam() : base() { values = new QItemList <QItem>(this); }
public QEnum() { Items = new QItemList <QItem>(); }