У меня есть datagridview, который содержит около 400000 строк - где пользователь выбирает несколько строк, я бы хотел, чтобы список long был заполнен определенной ячейкой из выбранных строк, то есть скрытым значением первичного ключа, которое у меня есть в Datagridview.
Я зашел так далеко, но, похоже, не могу заставить его работать, и я думаю, что выполнение через LinQ будет быстрее, чем выполнение его как For ... Next или For ... Каждый цикл на выбранных строках - особенно если пользователь выполняет (и может и будет) выбрать более 100000 строк, но мой синтаксис LinQ ужасен, поэтому, пока я здесь, если у кого-то есть отличная рекомендация для LinQ, это тоже было бы здорово (хотя есть книги, нет ничего лучше, чем рекомендация от кого-то, кто прочитал несколько из них)
Dim Mylist As New List(Of Long)
Mylist.AddRange(DataGridView1.SelectedRows.Cast(Of DataGridViewCell).Select(Function(c) c.ColumnIndex(0).Value).ToList)
VS, похоже, не нравится c.ColumnIndex (0) .Value





Свойство SelectedRows - это набор DataGridViewSelectedRowCollection, а не набор DataGridViewCell. Таким образом, вы должны привести к правильному типу, а затем вы можете использовать Linq для перечисления по коллекции DataGridViewRow, которая имеет свойство Клетки. Это свойство представляет собой набор DataGridViewCell. Теперь вы можете использовать эту коллекцию как массив и использовать свой индекс для доступа к нужному столбцу. Наконец, не полагайтесь на автоматическое преобразование типов, предоставляемое VB.NET. Я предлагаю всегда быть откровенным в ваших преобразованиях. Используйте Conver.ToInt64 или Int64.Parse
Dim result = DataGridView1.SelectedRows.
Cast(Of DataGridViewRow).
Select(Function(c) Convert.ToInt64(c.Cells(0).Value)).
ToList()
Я цитирую @jmcilhinney: «Хорошо написанный код LINQ почти всегда будет выполняться медленнее, чем эквивалентный хорошо написанный код, не связанный с LINQ». stackoverflow.com/questions/48739868/…