как получить предметы между параметрами поиска - PullRequest
0 голосов
/ 14 марта 2011

Работа на C #. У меня есть список с именем InputList . Из этого списка мне нужно найти некоторую строку. После поиска я хочу выбрать все элементы в параметре поиска. Ниже приводится подробное описание рисунка.

Файл ввода текста: enter image description here

Коллекция: enter image description here

После прочтения textFile Я сохраняю данные в наборе данных, затем преобразую набор данных в collection . Из этой коллекции я хочу получить значение между параметрами поиска.

Я пишу приведенный ниже синтаксис, но r3 результат не может меня удовлетворить.

var InputList = (from p in ds.Tables["InputFile"].Rows.Cast<DataRow>().ToArray() select p.ItemArray).ToList();

            var r3 = (from c in InputList
                      where c.Any(e => e.ToString().Contains("Loading")) 
                      select c).ToList();

Если есть какие-либо вопросы, пожалуйста, спросите. Спасибо заранее.

1 Ответ

0 голосов
/ 15 февраля 2012

Чтобы получить результаты между запросами, SkipWhile() и TakeWhile() будут работать (у обоих есть варианты, которые дают индекс для предиката), но я не думаю, что это именно то, что вы хотите, учитывая ваш образ.

var loadingIndexes = InputList.Select((r, i) => new { Row=row, Index=i })
                              .Where(x => x.Row.Any(e =>
                                  e.ToString().Contains("Loading"))
                              .Select(x => x.Index);
var betweenLines = loadingIndexes
                       .Select(i => InputList
                           .Skip(i)
                           .TakeWhile(r => !r.Any(e =>
                                                  e.ToString().Contains("FULL")))
                           .ToList())
                       .ToList();

Здесь betweenLines - это List из List с DataRow с, где каждый список находится между DataRow, содержащим строку «Загрузка» (включительно) и следующим «DataRow», содержащим строку "ПОЛНЫЙ" (эксклюзив).

...