【发布时间】:2021-01-03 00:23:09
【问题描述】:
我有一个 linq 问题。我想使用 LINQ 对 DataTable 中的数据进行分组(列:RUN_NAME、H_YYYY、H_MM、H_MON)。
数据如下:
| RUN_NAME | H_YYYY | H_MM | H_MON |
|---|---|---|---|
| 2019-1 | 2019 | 1 | Jan |
| 2019-1 | 2019 | 2 | Feb |
| 2019-1 | 2019 | 3 | Mar |
| 2019-1 | 2019 | 4 | Apr |
| 2019-2 | 2019 | 5 | May |
| 2019-2 | 2019 | 6 | Jun |
| 2019-2 | 2019 | 7 | Jul |
| 2019-2 | 2019 | 8 | Aug |
| 2019-3 | 2019 | 9 | Sep |
| 2019-3 | 2019 | 10 | Oct |
| 2019-3 | 2019 | 11 | Nov |
| 2019-3 | 2019 | 12 | Dec |
我需要这样的结果,其中将单个运行详细信息分组为每次运行的一部分(2019-1、2019-2、2019-3):
2019-1
2019 1 Jan
2019 2 Feb
2019 3 Mar
2019 4 Apr
2019-2
2019 5 May
2019 6 Jun
2019 7 Jul
2019 8 Aug
2019-3
2019 9 Sep
2019 10 Oct
2019 11 Nov
2019 12 Dec
这是我迄今为止尝试过的:
CalendarMonthList = (From rw As DataRow In dt.Rows Select New CalendarMonth With {
.Run_Name=CheckStringNull(rw("run_name").ToString),
.Month_Scope = (From r In dt.AsEnumerable Where r("run_name") = .Run_Name Select New MonthScope With {.h_yyyy = CheckDbNull(rw("h_yyyy")),
.h_mm=CheckDbNull(rw("h_mm")),
.h_mon=CheckStringNull(rw("h_mon").ToString)}).Distinct.ToList()}).Distinct.ToList()
我对 CalendarMonth 的定义如下:
Public Class CalendarMonth
Public Property Run_Name As String
Public Property Month_Scope As List(Of MonthScope)
End Class
我对 MonthScope 类的定义如下:
Public Class MonthScope
Public Property h_yyyy As Integer?
Public Property h_mm As Integer?
Public Property h_mon As String
End Class
【问题讨论】:
-
那么实际的问题是什么?您的代码提供了什么结果,这与您的预期有何不同?
-
您真的要分组还是只是想排序?我没有看到任何尝试在您的代码中进行分组的证据,因此显然不会发生分组。如果你真的想分组,那么你应该阅读如何使用 LINQ 进行分组,然后尝试实现你所学的,如果它不起作用,然后发布一个问题。
-
有一个分组示例here 可以帮助您入门。那是搜索“vb.net linq group”的结果第一页的一半。