【问题标题】:Group DataSet Column Values into Comma Separated String using LINQ使用 LINQ 将 DataSet 列值分组为逗号分隔的字符串
【发布时间】:2014-06-02 17:51:46
【问题描述】:

如何在 VB.NET 中使用 LINQ 将数据集中的列值组合成一个带有逗号分隔值的字符串?

我有一张表,结构如下

ID        Name
728       Jim
728       Katie
728       Rich 

如何将这些组合成一行,如下所示

ID   Name
728  Jim,Katie,Rich

请注意,我使用的是 LINQ to Dataset,因此请以适用的语法回复。

【问题讨论】:

  • 您想在字符串中包含“ID 名称”吗?你的问题不是很清楚。为什么 Rich 包含在字符串中,即使他是不同的 ID?
  • 是的,它们都具有相同的 ID。我已经编辑过了。格式搞砸了。它应该在一张桌子上。 ID 和 Name 是表中的列。
  • 这不是我要找的答案。我知道我可以使用 string.join 但我希望在 VB.NET 中使用 group By 关联的 LINQ 查询。

标签: vb.net linq


【解决方案1】:

这是一个示例(使用 LINQ to 对象,但应该很容易针对 LINQ to DataSet 进行调整):

Class Record
  Public Property ID As Integer
  Public Property Name As String
  Sub New(id As Integer, name As String)
    Me.ID = id
    Me.Name = name
  End Sub
End Class

Sub Main()
  Dim recordList As New List(Of Record)

  recordList.Add(New Record(728, "Jim"))
  recordList.Add(New Record(728, "Katie"))
  recordList.Add(New Record(728, "Rich"))

  recordList.Add(New Record(729, "John"))
  recordList.Add(New Record(729, "Michael"))

  Dim v = From r As Record In recordList
          Group By ID = r.ID Into Records = Group
          Select ID, Name = String.Join(","c, Records.Select(Function(x) x.Name))
End Sub

【讨论】:

    【解决方案2】:

    这应该做你想做的:

    Dim result = list.GroupBy(Function(a) a.ID) _
    .Select(Function(g) New With {.ID = g.Key, .csvList = g.Select(Function(n) n.Name) _ 
    .Aggregate(Function(accumulation, current) accumulation + "," + current)}) _
    .ToList()
    

    【讨论】:

    • 如果您打算在 VB 中使用嵌套的 Lambda,您至少可以在其中放置一些换行符,以便我们了解到底发生了什么。
    • 明白了,把它们放进去
    【解决方案3】:

    这是一个使用 LINQ to Dataset 的示例:

    Dim grouped =
        From row In dt.AsEnumerable()
        Group row By id = row.Field(Of Integer)("ID") Into Group
        Select ID, Name = String.Join(",", From i In Group Select i.Field(Of String)("Name"))
    

    【讨论】:

      【解决方案4】:

      很晚了,但我也遇到了同样的问题,这是我的解决方案。希望这可以帮助某人

       Dim grouped = 
              a.AsEnumerable().
                GroupBy(Function(row) row.Field(Of Integer)("ID")).
                Select(Function(group, ID)
                           Return New With
                           {
                               .ID= ID,
                               .Name= String.Join(",", group.Select(Function(row) row.Field(Of String)("Name")))
                           }
                       End Function)
      

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-11
        • 2021-02-24
        • 1970-01-01
        相关资源
        最近更新 更多