首先,如果我問的是一個愚蠢的問題,我不確定我問的是不是可能的問題。
所以我可以使用 linq 過濾 DataTable 來獲取我需要的資料,我想知道是否可以使用 simlar 陳述句過濾列。
例如,如果我有以下資料表 dtMyData
| ID | 姓名 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 1 | 康納 | 100 | 87 | 3 | 0 |
| 2 | 坦率 | 35 | 70 | 0 | 0 |
| 3 | 杰夫 | 35 | 13 | 0 | 57 |
我可以使用以下陳述句將其過濾到以下內容
dtMyData = dtMyData.AsEnumerable().Where(Function (f) f("Name").ToString().Equals("Frank")).CopyToDataTable
| ID | 姓名 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 2 | 坦率 | 35 | 70 | 0 | 0 |
我想要做的(如果可能的話)是以類似的方式過濾列,以便我可以選擇所有列 > 2 加上前 2 列。給我以下列
| ID | 姓名 | 3 | 4 |
|---|---|---|---|
| 1 | 康納 | 3 | 0 |
| 2 | 坦率 | 0 | 0 |
| 3 | 杰夫 | 0 | 57 |
uj5u.com熱心網友回復:
看看這個方法:
Private Function CopyTable(source As DataTable, columnsToKeep As IEnumerable(Of String)) As DataTable
Dim copiedTable As DataTable = source.Clone()
Dim columnsToRemove() As DataColumn = copiedTable.Columns.Cast(Of DataColumn).Where(Function(column) Not columnsToKeep.Contains(column.ColumnName)).ToArray()
For i As Integer = 0 To columnsToRemove.Length - 1
copiedTable.Columns.Remove(columnsToRemove(i))
Next
For Each row As DataRow In source.Rows
Dim values As New List(Of Object)
For Each column As DataColumn In copiedTable.Columns
values.Add(row.Item(column.ColumnName))
Next
copiedTable.Rows.Add(values.ToArray())
Next
Return copiedTable
End Function
這是做什么的
- 克隆資料表
- 遍歷復制的 DataTable 并洗掉不在
columnsToKeep - 回圈遍歷原始資料表并將行添加到復制的資料表中,而沒有不在資料表中的單元格
columnsToKeep
小提琴:https : //dotnetfiddle.net/2l6wk9
編輯
實際上使用DataTable.Copyover會更容易DataTable.Clone,我很抱歉:
Private Function CopyTable(source As DataTable, columnsToKeep As IEnumerable(Of String)) As DataTable
Dim copiedTable As DataTable = source.Copy()
Dim columnsToRemove() As DataColumn = copiedTable.Columns.Cast(Of DataColumn).Where(Function(column) Not columnsToKeep.Contains(column.ColumnName)).ToArray()
For i As Integer = 0 To columnsToRemove.Length - 1
copiedTable.Columns.Remove(columnsToRemove(i))
Next
Return copiedTable
End Function
這個更新的代碼的作用是:
- 復制 DataTable 及其資料
- 遍歷復制的 DataTable 并洗掉不在
columnsToKeep
小提琴:https : //dotnetfiddle.net/NEIm2t
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360051.html
下一篇:.net6&MoreLinq:System.Linq.Enumerable.DistinctBy和MoreLinq.MoreEnumerable.DistinctBy之間的呼叫不明確
