#c# #list #linq
#c# #Список #linq
Вопрос:
Я заполнил список lstLines
несколькими строками.
Например, в списке есть несколько строк, как в:
- В столбце SName листа [Sheet1] отсутствует значение ячейки в строке 6.
- В столбце SName листа [Sheet1] отсутствует значение ячейки в строке 9.
- FName столбца листа [Sheet1] имеет отсутствующее значение ячейки в строке 6.
- FName столбца листа [Sheet1] имеет отсутствующее значение ячейки в строке 11.
- Столбец DOB листа [Sheet1] имеет отсутствующее значение ячейки в строке 6.
- FName столбца листа [Класс 4] имеет отсутствующее значение ячейки в строке 1.
- Столбец DOB листа [Класс 4] имеет отсутствующее значение ячейки в строке 3.
- Столбец DOB листа [Класс 4] имеет отсутствующее значение ячейки в строке 4.
Теперь на основе [Sheet1] и [Grade 4] создайте отдельный список. Я сделал это.
Но я не могу упорядочить разделенный список на основе значений строки(они находятся в конце каждой строки).
Например, строки [Лист 1] должны располагаться по возрастанию в соответствии со значениями строк (6, 9, 6, 11, 6, 6).
foreach (var item in _lstErrorSheets)
{
var newlist = (from s in _lstLines where s.Contains(item) select s).ToList();
foreach (var error in newlist)
{
rtbDisplay.AppendText(lineNum ". " error " rn");
lineNum ;
}
}
Ответ №1:
Если я чего-то не упускаю, это можно сделать с помощью одной строки:
var result = lstLines
.Where(l => l.Contains("[Sheet1]"))
.OrderBy(l => int.Parse(l.Substring(l.IndexOf("row") 4).TrimEnd('.')));
Разбивка:
Используйте Where
для фильтрации списка и OrderBy
для его сортировки.
Вы хотите выполнить сортировку по числовому значению строки, поэтому вам нужно использовать substring
для выделения номера строки точкой в конце каждой строки, а затем trimEnd
удалить точку и, наконец, int.Parse
получить число, иначе 11
оно будет стоять перед 6
или 9
.