【问题标题】:Comma separated values from datatable using linq使用 linq 将数据表中的逗号分隔值
【发布时间】:2016-12-14 10:43:49
【问题描述】:

这是我的DataTable 结构:

srno. areaid areaName
1     1      Mumbai
2     1      Delhi
3     1      New York
4     2      Sydney

我想查询它,结果应该是:

srno. areaid areaName
1     1      Mumbai,Delhi, New York
2     2      Sydney

这是我的查询:

Dim grouped = From row In a.AsEnumerable()
              Group row By id = row.Field(Of String)(areaid) Into Group
              Select id, areaName = String.Join(",", From i In Group Select i.Field(Of String)("areaName")) 

我得到了结果:

结果 = 预期类型。

我做错了什么?

【问题讨论】:

    标签: .net vb.net linq


    【解决方案1】:

    Fabio 指出的关键是为返回创建 Anon 类型。但是可以通过在GroupBy 方法中对其进行操作来跳过组 SELECT。

    Dim grouped = dt.AsEnumerable().
            GroupBy(Function(row) row.Field(Of Integer)("AreaId"),
                    Function(key, values) New With {
                        .Id = key,
                        .Names = String.Join(",", values.
                                          Select(Function(q) q.Field(Of String)("AreaName")))
                                                   }
                    ).OrderBy(Function(j) j.Id)
    
    For Each item In grouped
        Console.WriteLine("{0}  {1}", item.Id, item.Names)
    Next
    

    我在表格中添加了更多元素(2 组不是一个好的测试)并且顺序较少。结果:

    1 孟买,德里,纽约
    2 悉尼
    3 巴黎,伦敦

    【讨论】:

      【解决方案2】:

      Select 语句中你需要创建匿名类的实例

      Dim grouped = 
          a.AsEnumerable().
            GroupBy(Function(row) row.Field(Of Integer)("areaid")).
            Select(Function(group, areaId)
                       Return New With
                       {
                           .AreaId = areaId,
                           .AreaNames = String.Join(",", group.Select(Function(row) row.Field(Of String)("areaName")))
                       }
                   End Function)
      

      【讨论】:

      • 没有兄弟同样的问题!我刚刚使用您的代码更新了快照
      • 您需要将“areaid”列的值转换为Integer。在您的代码中,您将其转换为 String 并正确提供列名作为字符串 "areaid"
      • 我不认为这是问题所在。我改变了它,仍然没有成功。顺便说一句,当我从选择中删除第二列“areaName”时,我发布的查询返回了数据。所以我想选择有问题
      • 我的糟糕你的解决方案完美!非常感谢..我所做的唯一更改是 .AreaId= group.Select(Function(row) row.Field(Of String)("AreaId") 并且在使用值时我使用了 .first
      • @Sameer,AreId是group的key,所以不用group.Select...也可以访问
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多