Это частично определенная функция, которую я использую, чтобы получить указанные строки в текстовом файле, пропускание индекса линий я хочу:Заказать LINQ элементов запроса по коллекции чисел
Public Shared Function GetLines(ByVal sourceFilepath As String,
ByVal lineNumbers As IEnumerable(Of Integer)) As IEnumerable(Of String)
Return File.ReadAllLines(sourceFilepath, encoding).
Select(Function(line As String, index As Integer)
Return New With
{
Key .line = line,
Key .index = index + 1
}
End Function).
Where(Function(con) lineNumbers.Contains(con.index)).
OrderBy(Function(x) x.index.CompareTo(lineNumbers(x.index))).
Select(Function(con) con.line)
End Function
Примера использование:
GetLines("C:\file.txt", {1, 5, 6, 2} ' Linenumbers 1, 5, 6, and 2.
проблема заключается в том, что мне нужно сохранить порядок строк, в том же порядке, который я указал индексы, поэтому функция должна упорядочить элементы запроса на указанном порядке {1, 5, 6 , 2}, но вместо этого я получаю строки в следующем порядке: {1, 2, 5, 6}.
Как исправить оценку, которую я делаю в расширении OrderBy
, чтобы вернуть ожидаемые результаты ?.
спасибо, но я думаю, что вы ответили, прежде чем я изменил код, чтобы избежать этой проблемы «непроницаемости», я удалил некоторые ненужные части запроса, чтобы избежать беспорядка с типами анонимов, если вы видите, код выше не имеет свойства индекса для доступа, я все равно могу сделать это таким образом? ...и как?. или я должен продолжать использовать другой запрос? , – ElektroStudios
Нет. Я думаю, вам нужно вернуться к тому, как вы это делали раньше, когда вы включали индекс, привязанный к каждой позиции, чтобы затем вы могли упорядочить их по индексу. Если вы не включаете это в результаты 'Select', тогда нет способа узнать в последующих методах, каковы были исходные индексы. –