LINQ-使用类型计数对对象进行分组

LINQ-使用类型计数对对象进行分组,linq,grouping,aggregate,Linq,Grouping,Aggregate,我有一个对象集合,每个对象由一个特定的“组”定义。如何编写LINQ查询以生成按“组”分组的每个对象的计数 作为一个例子,让我们假设我有以下的课程 public class Release { int ReleaseNumber; public ReleaseDetails[] details; } public class ReleaseDetails { string Group; // other details omitted } 对于给定

我有一个对象集合,每个对象由一个特定的“组”定义。如何编写LINQ查询以生成按“组”分组的每个对象的计数

作为一个例子,让我们假设我有以下的课程

public class Release 
{
     int ReleaseNumber; 

     public ReleaseDetails[] details;

}

public class ReleaseDetails
{
    string Group;

    // other details omitted
}
对于给定的版本,我希望能够产生如下输出:

Release number 1 contains the following details;
 - 17 records in Group A
 - 12 records in Group B
 - 6 records in Group C

非常感谢您的帮助。

您可以这样做

var q = from d in r.Details
            group d by d.Group into counts
            select new { Count = counts.Count(), Group = counts.Key };
完整示例:

        Release r = new Release
        {
            ReleaseNumber = 1
            ,
            Details = new ReleaseDetails[]
            {
                new ReleaseDetails { Group = "a"},
                new ReleaseDetails { Group = "a"},
                new ReleaseDetails { Group = "b"},
                new ReleaseDetails { Group = "c"},
                new ReleaseDetails { Group = "d"},
                new ReleaseDetails { Group = "d"},
                new ReleaseDetails { Group = "e"},

            }
        };

        var q = from d in r.Details
                group d by d.Group into counts
                select new { Count = counts.Count(), Group = counts.Key };

        foreach (var count in q)
        {
            Console.WriteLine("Group {0}: {1}", count.Group, count.Count);
        }
给你

    public class ReleaseDetails
    {
        public string Group { get; set; }
        public ReleaseDetails() {}
        public ReleaseDetails(string grp){Group = grp;}
    }

            var qry = new Release();
            qry.details = new List<ReleaseDetails>();
            qry.details.Add(new ReleaseDetails("A"));
            qry.details.Add(new ReleaseDetails("A"));
            qry.details.Add(new ReleaseDetails("B"));
            qry.details.Add(new ReleaseDetails("C"));
            qry.details.Add(new ReleaseDetails("C"));
            qry.details.Add(new ReleaseDetails("B"));


 var result = from x in qry.details
                group x by x.Group into g
                select new 
                { 
                    Count = g.Count(), 
                    Group = g.Key 
                };

//Or using Labmda
var result1 = qry.details.GroupBy(x => x.Group).Select(g => new { Count = g.Count(), Group = g.Key });
公共类发布详细信息
{
公共字符串组{get;set;}
public ReleaseDetails(){}
公共发布详细信息(字符串grp){Group=grp;}
}
var qry=新版本();
qry.details=新列表();
新增(新发布详情(“A”);
新增(新发布详情(“A”);
新增(新发布详情(“B”);
新增(新发布详情(“C”);
新增(新发布详情(“C”);
新增(新发布详情(“B”);
var结果=从qry中的x开始。详细信息
将x按x分组。分组为g
选择新的
{ 
Count=g.Count(),
组=g.键
};
//或者使用Labmda
var result1=qry.details.GroupBy(x=>x.Group)。选择(g=>new{Count=g.Count(),Group=g.Key});

太棒了。正是我想要的。感谢mate.Hmmm,就像Faster示例一样,在尝试在linq查询中按组分组之前,实际上需要在ReleaseDetails中提供Group属性。除此之外,您提出的答案似乎与faester几乎完全相同。很抱歉,我没有将ReleaseDetails ctor复制到分配组的位置。代码假定它包含在“其他细节省略”中。我编辑了答案,以包含ctor和lambda进行分组的方式。非常好。感谢使用Lambda编辑和替换示例。我感谢你抽出时间来做调整+1.