VB.NET将选定Datagridview中的特定单元格复制到长单元格列表中
我有一个datagridview,它包含大约400000行-当用户选择多行时,我希望从所选行(即datagridview上的隐藏主键值)中填充一个特定单元格的long列表 我已经做到了这一点,但我似乎无法让它发挥作用,我认为通过LinQ进行操作将比作为For…Next或For…selectedrows上的每个循环更快-特别是如果用户执行(并且能够并且将要)选择100000多行-但我的LinQ语法非常糟糕-因此,当我在这里时,如果有人对LinQ也有很好的推荐,那就太好了(虽然有很多书,但没有什么比读过几本书的人推荐更好的了) VS似乎不喜欢c.ColumnIndex(0)。Value属性SelectedRows是DataGridViewSelectedRowCollection的集合,而不是DataGridViewCell的集合。因此,应该强制转换为适当的类型,然后可以使用Linq枚举具有Cells属性的DataGridViewRow集合。此属性是DataGridViewCell的集合。现在,您可以将该集合用作数组,并使用索引访问适当的列。VB.NET将选定Datagridview中的特定单元格复制到长单元格列表中,vb.net,linq,datagridview,datagridviewcolumn,Vb.net,Linq,Datagridview,Datagridviewcolumn,我有一个datagridview,它包含大约400000行-当用户选择多行时,我希望从所选行(即datagridview上的隐藏主键值)中填充一个特定单元格的long列表 我已经做到了这一点,但我似乎无法让它发挥作用,我认为通过LinQ进行操作将比作为For…Next或For…selectedrows上的每个循环更快-特别是如果用户执行(并且能够并且将要)选择100000多行-但我的LinQ语法非常糟糕-因此,当我在这里时,如果有人对LinQ也有很好的推荐,那就太好了(虽然有很多书,但没有什么比
最后,不要依赖VB.NET提供的自动类型转换。我建议在你的转换中总是要明确。使用Conver.ToInt64或Int64.Parse
Dim result = DataGridView1.SelectedRows.
Cast(Of DataGridViewRow).
Select(Function(c) Convert.ToInt64(c.Cells(0).Value)).
ToList()
属性SelectedRows是DataGridViewSelectedRowCollection的集合,而不是DataGridViewCell的集合。因此,应该强制转换为适当的类型,然后可以使用Linq枚举具有Cells属性的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代码执行得慢。”我引用@jmcilhinney“写得好的LINQ代码几乎总是比等效的写得好的非LINQ代码执行得慢。”