IndexOf в linq Проблема при попытке вырезать файл - PullRequest
0 голосов
/ 09 мая 2020

У меня проблема при использовании IndexOf в Linq, и в течение нескольких дней мой мозг работает sh. Проблема: у меня есть запрос SQL в файле, например

create table a (col1 nvarchar(max),col2 nvarchar(max), col3 nvarchar(max))

insert into a (col1, col2 ,col 3) values
('text 1','text 2','text 3');

insert into a (col1, col2 ,col 3) values
('text 1','text 2','text 3');

.... (and maybe 0 -> 2000 times "insert into" like that)

Теперь я хочу создать несколько файлов, возможно, 500 запросов «вставить» в файл и запустить dapper для вставки базы данных. И вот мой код:

        var insert_query = line_result.Where(r => r.TrimStart().StartsWith("INSERT INTO")).ToList();
            for (int j = 0; j < insert_query.Count(); j += 500)
            {
                var start_line_insert = 0;
                var end_line_insert = 0;
                if (insert_query.Count() < 500)
                {
                    start_line_insert = line_result.IndexOf(insert_query[j]);
                    end_line_insert = line_result.Count() - 1;
                }
                if (insert_query.Count() - j > 500)
                {
                    start_line_insert = line_result.IndexOf(insert_query[j]);

                    end_line_insert = line_result.IndexOf(insert_query[j + 500]) - 1;


                }
                if (insert_query.Count() - j < 500 && insert_query.Count() - j > 0)
                {
                    start_line_insert = line_result.IndexOf(insert_query[j]);
                    end_line_insert = line_result.Count() - 1;

                }
                var insert_result = line_result.Skip(start_line_insert).Take(end_line_insert - start_line_insert);

                var name = "insert_script_for_part_" + i + "_number_" + j +".sql";
                File.WriteAllLines(Path.Combine(new_file_full, name), insert_result);
                Console.WriteLine("Run Script Successful!");
            }


with variable line_result is all line in file.

И результат в картинках: new_member_and_cannot_to_show_picture _: <</a>

Когда я запускаю отладку, если line_result имеет 1700 (пример) insert into строка, этот код

        if (insert_query.Count() - j > 500)
            {
                start_line_insert = line_result.IndexOf(insert_query[j]);

                end_line_insert = line_result.IndexOf(insert_query[j + 500]) - 1;


            }

всегда возвращает end_line_insert = start_line_insert - 1, но я пытался перейти на 500 шагов.

Я думаю, потому что это та же строка insert into a..., и IndexOf понимает первую строка соответствовала ему. Как я могу это исправить? Большое спасибо! Извините по поводу моего англия sh нехороший и очень длинный вопрос.

...