[英]Using Linq to select item with maximum value in a group
我有一張這樣的桌子:
dt = New DataTable()
dt.Columns.AddRange(New DataColumn() {
New DataColumn("time"),
New DataColumn("fname", Type.GetType("System.String")),
New DataColumn("note", Type.GetType("System.String")),
New DataColumn("du", Type.GetType("System.Int32")),
New DataColumn("site", Type.GetType("System.String"))})
dt.Rows.Add(New Object() {"2023-01-28 02:01", "aaa1", "xxx11xxxxxxx", 100, "a"})
dt.Rows.Add(New Object() {"2023-01-28 03:01", "bbb1", "xxxx22xxxxxx", 2, "b"})
dt.Rows.Add(New Object() {"2023-01-28 09:01", "ccc", "xxxx33xxxxxx", 3, "c"})
dt.Rows.Add(New Object() {"2023-01-28 02:01", "aaa2", "xxx44xxxxxxx", 3, "a"})
dt.Rows.Add(New Object() {"2023-01-28 03:01", "bbb2", "xxx55xxxxxxx", 53, "b"})
dt.Rows.Add(New Object() {"2023-01-28 03:01", "bbb3", "xxx66xxxxxxx", 89, "b"})
dt.Rows.Add(New Object() {"2023-01-28 01:01", "xxx", "xxx77xxxxxxx", 5, "x"})
我想使用 linq 來查詢上表,從數據表中按時間和站點兩列分組,然后獲取具有最大du的fname我使用以下代碼:
Dim MYquery = (From p In dt.Select()
Group p By ID = New With _
{Key .time = p("time").ToString.Trim, _
Key .site = p("site")} _
Into Group Select Group(0)).ToArray.CopyToDataTable
結果如圖所示。
所需的表是:
時間 | 名字 | 筆記 | 杜 | 地點 |
---|---|---|---|---|
2023-01-28 02:01 | aaa1 | xxx11xxxxxxx | 100 | 一種 |
2023-01-28 03:01 | bbb3 | xxx55xxxxxxx | 53 | b |
2023-01-28 09:01 | 抄送 | xxxx33xxxxxx | 3個 | c |
2023-01-28 01:01 | xxx | xxx77xxxxxxx | 5個 | X |
我應該怎么辦?
(我是一個 C# 的人,我希望正確地從 C# 轉換而來):順便說一句,您想要的樣本 output 與您描述的不符。 它應該是站點“b”的 89 行,不是嗎?
Dim myQuery = (From r In dt.Select()
Group r By ID = New With {
Key .Time = r.Field(Of String)("Time"),
Key .Site = r.Field(Of String)("Site")
} Into Group
Let mx = Group.Max(Function(gg) gg.Field(Of Integer)("Du"))
From row In Group
Where row.Field(Of Integer)("Du") = mx
Select row).CopyToDataTable()
時間 | 名字 | 筆記 | 杜 | 地點 |
---|---|---|---|---|
2023-01-28 02:01 | aaa1 | xxx11xxxxxxx | 100 | 一種 |
2023-01-28 03:01 | bbb3 | xxx66xxxxxxx | 89 | b |
2023-01-28 09:01 | 抄送 | xxxx33xxxxxx | 3個 | c |
2023-01-28 01:01 | xxx | xxx77xxxxxxx | 5個 | X |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.