2013-06-25 90 views
1

我有一个Employee Collection,我想以这样一种方式进行过滤,即只应该过滤前两列,并且应该追加第三列值,最终结果应该放在下面的单行如何在Linq中对组中的元素进行分组

是我的代码

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); 
     } 

,但我想通过姓名和部门显示结果一样集团员工下方

Employee1 Dept1 Language1,Language2 
Employee2 Dept2 Language2 
Employee3 Dept3 Language3
+0

您目前的结果是什么? –

回答

2

您不想在KnownLanguages上进行分组。它不应该包含在你的组选择器中。组选择器应该选择您希望组中所有项目都相同的所有内容。

您还需要更改打印结果的方式。通过Key获取组中每个项目的通用值,并通过迭代组本身获取其他值。

var query = Employeecollection.GroupBy(x => new 
{ 
    x.EmpName, 
    x.EmpDept 
}; 

foreach (var group in query) 
{ 
    string languages = string.Join(", ", 
     group.Select(employee => employee.KnownLanguages) 
     .Distinct()); 
    Console.WriteLine(group.Key.EmpName + " " + group.Key.EmpDept + " " 
     + languages; 
} 
+0

+1也正确 –

+0

谢谢塞维正在工作但对于Employee3我得到Language3 2次,但我需要1次如何解决这种情况? – Gun

+0

@yug添加一个'Distinct',参见编辑。 – Servy

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)) 
} 

如果你想要的结果为单行,然后执行以下投影代替:

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

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

+0

感谢lazyberezovsky,但在这种情况下,我们得到了Language3 2次,但我需要在一次显示它 – Gun

+0

@yug添加不同的调用'g.Select(x => x.KnownLanguages).Distinct()' –

相关问题