static CommandArray <CommandData> configureCommands() { CommandArray <CommandData> cmds = new CommandArray <CommandData>(); cmds.AddCommand(cmd => { cmd.Name = "search"; CommandDataPattern pattern = new CommandDataPattern(); pattern.AddOption('l', false); pattern.AddOption('w', true); pattern.AddOption('a', false); cmd.Execute = (arguments) => { CommandData argument = arguments[0]; argument.SetPattern(pattern); Stream outStream = null; if (argument.IsKey('w')) { FileMode mode = FileMode.Create; if (argument.IsKey('a')) { mode = FileMode.Append; } outStream = new FileStream(argument.GetKeyValue('w'), mode); } else { outStream = Console.OpenStandardOutput(); } String searchPhrase = argument.args[0]; using (outStream) { if (argument.IsKey('l')) {//поиск в БД writeToStream(outStream, DBRepository.findByQuery(searchPhrase), searchPhrase); } else {//запрос к гуглу Query searchResult = webSearchers[0].search(searchPhrase); DBRepository.ConnectToDB(connect => { Query query = (from q in connect.queries where q.title == searchPhrase select q).Include("links").FirstOrDefault(); if (query != null) { if (!searchResult.Equals(query)) { Console.WriteLine("update data base"); connect.queries.Remove(query); connect.queries.Add(searchResult); connect.SaveChanges(); } } else { Console.WriteLine("write to data base"); connect.queries.Add(searchResult); connect.SaveChanges(); } }); writeToStream(outStream, searchResult.links, searchPhrase); } } }; }); cmds.AddCommand(cmd => { cmd.Name = "exit"; cmd.Execute = (arguments) => { Console.WriteLine("exiting..."); execute = false; }; }); return(cmds); }