在数据表上使用LINQ GroupBy返回多个字段

时间:2014-02-11 21:00:25

标签: c# linq datatable ienumerable

我有一个LINQ查询,它返回一个状态列表和一个数据表中每个状态缩写的计数。

var query = ds.Tables[0].AsEnumerable()
            .GroupBy(r => r.Field<string>("state"))
            .Select(grp => new 
                            { 
                                state = grp.Key, 
                                Count = grp.Count()
                            })
            .OrderBy(o => o.state)
            .ToList();

返回

State   Count
AL       55
AK       40
AZ       2

如何修改此查询以返回其他字段(州名称)?或者我是否需要采取另一种方法来实现这一目标?

State  Name       Count
AL     Alaska     55
AK     Arkansas   40
AZ     Arizona    2

2 个答案:

答案 0 :(得分:2)

创建要分组的匿名类型:

var query = ds.Tables[0].AsEnumerable()
            .GroupBy(r => new
            {
                state = r.Field<string>("state"),
                name = r.Field<string>("name"),
            })
            .Select(grp => new
            {
                name = grp.Key.name,
                state = grp.Key.state,
                Count = grp.Count()
            })
            .OrderBy(o => o.state)
            .ToList();

答案 1 :(得分:1)

假设所有“州”值的“名称”相同,您只需将Select更改为:

        .Select(grp => new 
                        { 
                            state = grp.Key, 
                            Name = grp.First().Field<string>("State Name"),
                            Count = grp.Count()
                        })