У меня проблема при использовании 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 нехороший и очень длинный вопрос.