You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET LINQ分组问题:如何对返回IEnumerable(Of tblUitleenbon)的函数按UitleenbonNR分组并保持原返回类型

如何在LINQ中按数字字段分组并返回原类型的IEnumerable(Of tblUitleenbon)

我明白你的困惑——LINQ的Group By和SQL里的用法确实有一点差异,直接用Group By会返回分组集合而非原实体类型,这就是你之前尝试失败的原因。下面根据你的需求分两种常见场景给出解决方案:

场景1:保留所有记录,仅将相同UitleenbonNR的记录聚集在一起

如果你的需求是让同一UitleenbonNR的记录连续排列(类似SQL里按该字段排序的效果),但想通过Group By实现,你可以先分组再展开每个组内的元素,这样就能返回原类型的序列:

' 替换原有Order By的代码行
results = From a In results
          Group By a.UitleenbonNR Into Group
          From item In Group
          Select item

如果还需要对每个组内的记录进行排序(比如按名称),可以在组内追加排序逻辑:

results = From a In results
          Group By a.UitleenbonNR Into Group
          From item In Group.OrderBy(Function(x) x.UitleenbonNaam)
          Select item

不过这里要提一句:如果只是为了让同NR的记录聚集,直接用Order By a.UitleenbonNR会更高效简洁,和上面的Group By再展开效果是一致的。

场景2:每个UitleenbonNR仅保留一条记录

如果你的需求是按UitleenbonNR分组后,每个分组只返回一条记录(比如每组的第一条,或最新的一条),可以在分组后选取组内的目标元素:

取每组的第一条记录

results = From a In results
          Group By a.UitleenbonNR Into Group
          Select Group.First()

取每组的最新记录(假设有日期字段UitleenDatum)

results = From a In results
          Group By a.UitleenbonNR Into Group
          Select Group.OrderByDescending(Function(x) x.UitleenDatum).First()

关键说明

LINQ的Group By默认返回IEnumerable(Of IGrouping(Of TKey, TElement)),其中IGrouping包含分组键和该组的元素集合。要返回原tblUitleenbon类型的序列,必须对分组结果做进一步处理:要么展开所有组的元素(场景1),要么从每个组中选取单个元素(场景2)。

替换后的完整函数示例(以场景2取每组第一条为例):

Public Function GetUitleenbonnen(ByVal bon As String, ByVal ontlener As String, ByVal asset As String) As IEnumerable(Of tblUitleenbon)
    dc = New BradyL2S(General.dblocation)
    Dim results = From a In dc.tblUitleenbons
    If bon <> "" Then
        results = From a In results Where a.UitleenbonNaam.Contains(bon)
    End If
    If ontlener <> "" Then
        results = From a In results Where a.UitleenbonOntlenerNaam.Contains(ontlener)
    End If
    If asset <> "" Then
        results = From a In results Where a.UitleenbonAssetNaam.Contains(asset)
    End If
    ' 替换原Order By为分组取第一条
    results = From a In results
              Group By a.UitleenbonNR Into Group
              Select Group.First()
    Return results
End Function

内容的提问来源于stack exchange,提问作者GertDeWilde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:34:04