按列分组,使用Linq由另一列分开

时间:2012-11-22 01:42:10

标签: c# linq c#-4.0 linq-to-sql

我正在使用Linq查询来分组列名并返回行列表。

var query = from row in ProcessSummaryData.AsEnumerable()
            group row  by new { Key = row .Field<string>("GroupDescription") } into g
            select new 
           { 
             GroupDescription = g.Key, 
             Values = g.ToList(), 

           };

此查询的输出类似于此

GroupDescription   Values
1                  12,abc,xyz
                   12,abx,yut
                   13,tye,lki

2                  14,asd,acd

现在在上面的示例中,Values是一个DataRow,我刚刚给出了一个值的示例。 现在我想要的是,对于GroupDescription'1',输出只有一行'12'值。 我尝试过一些事情,其中​​一个是在第一个列表上有另一个Linq查询,但这已经过了复杂的事情。 如何使用linq按第一列分组,然后对某些列返回列表使用Distinct以仅获取不同的行?

1 个答案:

答案 0 :(得分:1)

要获得字段值的第一次出现,您可以按该字段进行分组,然后获取每个分组的第一行。

var query = from row in ProcessSummaryData.AsEnumerable()
            group row  by new { Key = row .Field<string>("GroupDescription") } into g
            select new 
            { 
                GroupDescription = g.Key, 
                Values = (from value in g.ToList()
                          group value by value["Id"] into valueGroup
                          select valueGroup.First()).ToList()     
            };