如何在Linq中对组内的元素进行分组

Gun*_*Gun 1 c# linq

我有一个Employee Collection,我希望以这样的方式进行过滤,即只应过滤前2列,并且应附加第3列值,最终结果应该在一行中

以下是我的代码

List<Employe> Employeecollection = new List<Employe>();

        Employeecollection.Add(new Employe("Employee1", "Dept1","Language1"));
        Employeecollection.Add(new Employe("Employee2", "Dept2", "Language2"));
        Employeecollection.Add(new Employe("Employee3", "Dept3", "Language3"));
        Employeecollection.Add(new Employe("Employee3", "Dept3", "Language3"));
        Employeecollection.Add(new Employe("Employee1", "Dept1", "Language2"));

        foreach (Employe item in Employeecollection.GroupBy(x => new { fName = x.EmpName, lName = x.EmpDept, mName = x.KnownLanguages }).Select(g => g.First()))
        {
            Console.WriteLine(item.EmpName + "   " + item.EmpDept + " " + item.KnownLanguages);
        }
Run Code Online (Sandbox Code Playgroud)

但我想显示如下结果

Employee1 Dept1 Language1,Language2
Employee2 Dept2 Language2
Employee3 Dept3 Language3

Ser*_*kiy 5

按名称和部门对员工进行分组,然后为每个员工选择已知语言的连接字符串:

from e in Employeecollection
group e by new { e.Name, e.EmpDept } into g
select new {
   g.Key.Name,
   g.Key.EmpDept,
   Languages = String.Join(",", g.Select(x => x.KnownLanguages))
}
Run Code Online (Sandbox Code Playgroud)

如果您希望结果为单行,则执行以下投影:

select String.Format("{0} {1} {2}", 
    g.Key.Name, g.Key.EmpDept, String.Join(",", g.Select(x => x.KnownLanguages)))
Run Code Online (Sandbox Code Playgroud)

BTW我认为它是一个奇怪的属性名称KnownLanguages,属性包含单一语言