gpt4 book ai didi

vb.net - 当按列排序可能会有所不同时,使用 LINQ 对数据表进行排序

转载 作者:行者123 更新时间:2023-12-04 04:56:30 25 4
gpt4 key购买 nike

我需要对数据表进行排序,但是按列排序会有所不同。

场景#1,DataTable1 应按“Column1”排序。

场景#2,DataTable2 应按“Column1, Column2”排序。

下面是我为此目的创建辅助函数的第一次尝试。这工作正常。

Private Sub SortDataTable(ByRef dataTable As DataTable, ByVal sortColumnNames As List(Of String))
'Validation (not shown here)

Dim sortOrder = String.Join(", ", sortColumnNames)

dataTable.DefaultView.Sort = sortOrder
dataTable = dataTable.DefaultView.Table
End Sub

我尝试在 LINQ 中实现它,但是,我不知道如何将多个按列排序传递给 lambda 函数。正在进行中的代码如下所示。
Private Sub SortDataTable(ByRef dataTable As DataTable, ByVal sortColumnNames As List(Of String))
'Validation (not shown here)

dataTable.AsEnumerable().OrderBy(Function (row) row(sortColumnNames(0))).ThenBy(...)
End Sub

我应该如何将多个按列排序的方法传递给 OrderBy/ThenBy 扩展方法?

最佳答案

类似的东西:

Private Function SortDataTable(table As DataTable, ParamArray columns As String()) As DataTable
If columns.Length = 0 Then
Return table
End If

firstColumn = columns.First()

Dim result = table.AsEnumerable().OrderBy(Function(r) r(firstColumn))

For Each columnName As var In columns.Skip(1)
result = result.ThenBy(Function(r) r(columnName))
Next

Return result.AsDataView().ToTable()

End Function

从这个 C# 代码转换而来(我用 C# 编写了这个,然后使用了 http://www.developerfusion.com/tools/convert/csharp-to-vb/ ):
DataTable SortDataTable(DataTable table, params string[] columns)
{
if (columns.Length == 0)
{
return table;
}

firstColumn = columns.First();

var result = table.AsEnumerable().OrderBy(r => r[firstColumn]);

foreach (var columnName in columns.Skip(1))
{
result = result.ThenBy(r => r[columnName]);
}

return result.AsDataView().ToTable();
}

PS:没测试过。但这很简单,所以应该没有问题。

关于vb.net - 当按列排序可能会有所不同时,使用 LINQ 对数据表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com