Beispiel #1
0
 public void Order(OrderBy order)
 {
     values = OrderByExecutor.OrderBy(values, order);
 }
Beispiel #2
0
        public override List <string> ToList()
        {
            List <string> result = elements.ToList();

            foreach (ISubcommand subcom in subcommands)
            {
                if (subcom is Where)
                {
                    string        oldThis   = RuntimeVariables.GetInstance().GetValueString("this");
                    List <string> newresult = new List <string>();
                    foreach (string s in result)
                    {
                        RuntimeVariables.GetInstance().Actualize("this", s);
                        if ((subcom as Where).GetValue())
                        {
                            newresult.Add(s);
                        }
                    }
                    RuntimeVariables.GetInstance().Actualize("this", oldThis);
                    result = newresult;
                }
                if (subcom is OrderBy)
                {
                    result = OrderByExecutor.OrderBy(result, subcom as OrderBy);
                }
                if (subcom is With)
                {
                    List <string> elementsFromSubcommands = (subcom as With).GetValue();

                    if ((subcom as With).IsNegated())
                    {
                        //WITHOUT
                        result.RemoveAll(v => (subcom as With).GetValue().Contains(v));
                    }
                    else
                    {
                        //WITH
                        result.AddRange((subcom as With).GetValue());
                    }
                }
                if (subcom is NumericSubcommand)
                {
                    int number = (subcom as NumericSubcommand).GetValue();
                    switch ((subcom as NumericSubcommand).GetNumericSubcommandType())
                    {
                    case NumericSubcommandType.First:
                    {
                        if (number <= 0)
                        {
                            return(new List <string>());
                        }
                        else
                        {
                            if (number < result.Count)
                            {
                                result.RemoveRange(number, result.Count - number);
                            }
                        }
                        break;
                    }

                    case NumericSubcommandType.Last:
                    {
                        if (number <= 0)
                        {
                            return(new List <string>());
                        }
                        else
                        {
                            if (number < result.Count)
                            {
                                result.RemoveRange(0, result.Count - number);
                            }
                        }
                        break;
                    }

                    case NumericSubcommandType.Skip:
                    {
                        if (number >= result.Count)
                        {
                            return(new List <string>());
                        }
                        else
                        {
                            if (number > 0)
                            {
                                result.RemoveRange(0, number);
                            }
                        }
                        break;
                    }

                    case NumericSubcommandType.Each:
                    {
                        if (number > 1)
                        {
                            List <string> newresult = new List <string>();
                            int           c         = 0;
                            do
                            {
                                newresult.Add(result[c]);
                                c += number;
                            } while (c < result.Count);

                            result = newresult;
                        }
                        break;
                    }
                    }
                }
            }
            return(result.ToList());
        }