2013-01-11 110 views
0

我有一个数据表与此示例数据。Linq查询合并单元格结果?

enter image description here

需求量的就是让这个数据表,所以它返回的所有行,但重复的行(过去两年为例)的要求是通过使一个记录与一个逗号和回报有不同的价值观结合起来。

例如:

金银,Metllurgist 19尼克戈登。 。 。 。 。

请帮帮我。

THANKS

回答

1

由于专业领域是唯一变化的领域,你想为这个领域的综合价值,需要
1. Grouping基于Profession
2. Select记录
3.使用以下Aggregate用于组合专业

您还需要定义一个具体类型来表示(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是不是我的第一语言)

您需要添加的Data Row Extensions参考方法Field<T>(string fieldname)

+0

谢谢@Tilak,行不会重复,因为Profession列即使对于同一行也会有不同的值。我想让datatable返回所有行,重复行将它们组合起来,对于Profession列,可能会使它们成为逗号分隔,就像我在查询中提到的那样。请指导 – user576510

+0

答案更新为非重复专业领域。 – Tilak

+0

我很抱歉再次问,但因为我在vb中做,你能给vb代码吗?我试图用转换器转换它,但它说错误,我不明白是什么。请 – user576510