Как ускорить выборку по многим параметрам? быстрый парсинг

maryan

Client
Регистрация
04.07.2014
Сообщения
230
Благодарностей
40
Баллы
28
Задача определить все авто от 10000 до 20000 в Киевской области с двигателем до 2.0 и пробегом до 100 000, коробка и тип кузова любой
но таких фильтров много
Поступает за 1 сек по 2-4 строки в формате(формат можно менять на свой)

Киевская;skoda;octavia a5;2006;дизель;1.9;универсал;автомат;350;5000;pl;dtp;передний;белый
Львовская;renault;megane;2000;,бензин;1.9;универсал;механика;350;5000;pl;dtp;передний;белый


Как мне за 1 секунду успеть прогнать каждую строку на совпадение по 100 разным фильтрам примера ниже?


Киевская;skoda;.*;.*;2006|2007|2008|2009;.*;1.9|2.0;универсал;.*;110;350;300;15000;pl;.*;передний;белый;-
.*;.*;.*;.*;2006|2007|2008|2009;.*;1.2|3.0;седан;.*;110;350;300;15000;pl;.*;передний;белый
Киевская;audi;.*;.*;2006|2007|2008|2009;.*;1.9|2.0;универсал;.*;110;350;300;15000;pl;.*;передний;белый;-
.*;.*;.*;.*;2006|2007|2008|2009;.*;1.2|3.0;седан;.*;110;350;300;15000;pl;.*;передний;белый
Киевская;skoda;.*;.*;2006|2007|2008|2009;.*;1.9|2.0;универсал;.*;110;350;300;15000;pl;.*;передний;белый;-
Киевская;.*;.*;.*;2006|2007|2008|2009;.*;1.2|3.0;седан;.*;110;350;300;15000;pl;.*;передний;белый


Вот я планировал брать по очереди параметры фильтра и проверять. Нельзя как-то проще реализовать?
Пока умею работать только с файлами и таблицами. Может на json есть варианты?
 

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
117
Баллы
43
92567


CsvToLinq:
void Main()
{
/*
public class CsvModel
    {
        public string Geo {get;set;}
        public string Mark {get;set;}
        public string Model {get;set;}
        public int  Year {get;set;}
        public string Engenie {get;set;}
        public double EngenieLitr {get;set;}
        public string CuzType {get;set;}
        public string KorobkaType {get;set;}
        public int Min {get;set;}
        public int Max {get;set;}
        public string Locate {get;set;}
        public string Dtp {get;set;}
        public string Privod {get;set;}
        public string Color {get;set;}
    }
*/
                                                // Geo ; Mark ; Model ; Year; Engenie; EngenieLitr ; CuzType; KorobkaType; price: 350; max: 5000; state: pl; addinfo: dtp; Privod: передний; Color: белый
    List<string> dataCsv = new List<string>() { "Киевская;skoda;octavia a5;2006;дизель;1.9;универсал;автомат;400;5000;pl;dtp;передний;белый", "Львовская; renault; megane; 2000;,бензин; 1.9; универсал; механика; 350; 5000; pl; dtp; передний; белый" };
    
    // Parse to table
    IEnumerable<string> strCSV = dataCsv;
    var results = from str in strCSV
                  let tmp = str.Split(';')
                  select new
                  {
                      Geo = tmp[0].Trim(),
                      Mark = tmp[1].Trim(),
                      Model = tmp[2].Trim(),
                      Year = Convert.ToInt32(tmp[3].Trim()),
                      Engenie = tmp[4].Trim(),
                      EngenieLitr = Convert.ToDouble(tmp[5].Trim().Replace('.',',')),
                      CuzType = tmp[6].Trim(),
                      KorobkaType = tmp[7].Trim(),
                      Min =  Convert.ToInt32(tmp[8].Trim()),
                      Max =  Convert.ToInt32(tmp[9].Trim()),
                      Locate = tmp[10].Trim(),
                      Dtp = tmp[11].Trim(),
                      Privod = tmp[12].Trim(),
                      Color = tmp[13].Trim()
                  };
  Console.WriteLine(results);
 
  // Sorting
  var sorting = from val in results
                  .Where(val => val.Min >= 360 && val.Max <= 6000)
                                select new {val };
  Console.WriteLine(sorting);

}


// You can define other methods, fields, classes and namespaces here
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)