VB.net LINQ select 数据表中的特定行
VB.net LINQ select specific rows from datatable
我有这样一种情况,我将所有数据加载到 DataTable 中,但在我的例子中我只需要使用不以前缀(“#”)开头的列。
我可以构建一个函数来遍历数据,但我想使用 LINQ,因为我正在学习它。
我目前拥有的:
Dim l = (From r In (dt.AsEnumerable())
From c As DataColumn
In r.Table.Columns
Where Not c.ColumnName.Contains("#")).ToList()
但是结果不是我需要的。
我知道这个函数有什么问题,但我就是不知道怎么写
为了更清楚:
DataTable:
[Column1][Column2][Column3]
[Row1] 123 abv 12/10/21
[Row2] 555 sfsf 12/12/21
我不需要 [Column3],并且由于我要做的事情的特殊性,我需要使用完整的 DataTable。因此,结果将是:
DataTable, or List(of) or IEnumerable..:
[Column1][Column2]
[Row1] 123 abv
[Row2] 555 sfsf
而且我希望使用 LINQ,但如果它太复杂或不可能,我将使用正常的 vb 方式。我将构建一个仅包含所需列的新 DataTable...
如果您知道要保留哪些列,则可以执行 Select
dim result = dt.AsEnumerable().[Select](Function(x) New With {
Key .Col1 = x.Field(Of String)("Column1"),
Key .Col2 = x.Field(Of String)("Column2")
}).Tolist()
否则你可以
dim result = dt.AsEnumerable().[Select](Function(x) New With {
Key .Col1 = x.Field(Of String)("Column1"),
Key .Col2 = x.Field(Of String)("Column2"),
'put every field.....
}).Where(Function(y) Not y.Col3.StartsWith("#"c)).Tolist()
这就是我最终得到的。我只是从集合中删除不需要的列。
dt.Columns.Remove((From c As DataColumn In dt.Columns Where c.ColumnName.StartsWith("#")).First)
我有这样一种情况,我将所有数据加载到 DataTable 中,但在我的例子中我只需要使用不以前缀(“#”)开头的列。 我可以构建一个函数来遍历数据,但我想使用 LINQ,因为我正在学习它。
我目前拥有的:
Dim l = (From r In (dt.AsEnumerable())
From c As DataColumn
In r.Table.Columns
Where Not c.ColumnName.Contains("#")).ToList()
但是结果不是我需要的。 我知道这个函数有什么问题,但我就是不知道怎么写
为了更清楚:
DataTable:
[Column1][Column2][Column3]
[Row1] 123 abv 12/10/21
[Row2] 555 sfsf 12/12/21
我不需要 [Column3],并且由于我要做的事情的特殊性,我需要使用完整的 DataTable。因此,结果将是:
DataTable, or List(of) or IEnumerable..:
[Column1][Column2]
[Row1] 123 abv
[Row2] 555 sfsf
而且我希望使用 LINQ,但如果它太复杂或不可能,我将使用正常的 vb 方式。我将构建一个仅包含所需列的新 DataTable...
如果您知道要保留哪些列,则可以执行 Select
dim result = dt.AsEnumerable().[Select](Function(x) New With {
Key .Col1 = x.Field(Of String)("Column1"),
Key .Col2 = x.Field(Of String)("Column2")
}).Tolist()
否则你可以
dim result = dt.AsEnumerable().[Select](Function(x) New With {
Key .Col1 = x.Field(Of String)("Column1"),
Key .Col2 = x.Field(Of String)("Column2"),
'put every field.....
}).Where(Function(y) Not y.Col3.StartsWith("#"c)).Tolist()
这就是我最终得到的。我只是从集合中删除不需要的列。
dt.Columns.Remove((From c As DataColumn In dt.Columns Where c.ColumnName.StartsWith("#")).First)