Linq查询结合细胞结果?

时间:2013-01-11 04:44:48

标签: c# asp.net .net vb.net linq

我有一个包含此样本数据的数据表。

enter image description here

要求制作此数据表,使其返回所有行,但对于重复行(例如最后两行),要求是将不同的值与逗号组合,并通过将其作为一条记录返回。

例如:

Gold-Silver,Metllurgist 19 Nick Gordon。 。 。 。 。

请帮帮我。

感谢

1 个答案:

答案 0 :(得分:1)

由于专业领域是唯一的变化领域,并且您想要该领域的组合值,因此需要以下 1. Grouping基于Profession
2. Select记录
3.使用Aggregate组合专业

您还需要定义一个具体类型来代表Row(下面的代码中为ProfessionRecord

 var results = dataTable.AsEnumerable()
                   .GroupBy(x=> x.Field<string>("Profession"))
                   .Select (  grouping => 
                               new {
                                  Key=grouping.Key,
                                  CombinedProfession = grouping.Aggregate( (a,b)=> a + " " + b)
                                })
                    .Select (x=> new ProfessionRecord
                            {
                              Id = x.Key.Id,
                              Name = x.Key.Name,
                              Profesion = x.CombinedProfession,
                            });

VB.NET来自tool

 Dim results = dataTable.AsEnumerable().GroupBy(Function(x) x.Field(Of String)("Profession")).[Select](Function(grouping) New With { _
    .Key = grouping.Key, _
    .CombinedProfession = grouping.Aggregate(Function(a, b) a + " " + b) _
}).[Select](Function(x) New ProfessionRecord() With { _
    .Id = x.Key.Id, _
    .Name = x.Key.Name, _
    .Profesion = x.CombinedProfession _
})

(我不确定它的优化程度因为VB.NET不是我的第一语言)

您需要为方法Field<T>(string fieldname)

添加Data Row Extensions的引用