按属性列出的组列表以及多次出现的位置

时间:2015-03-16 15:14:25

标签: c# .net linq

我有一个学生类型的对象列表。

 public class Student
 {
    string FirstName
    string Surname
    int Age
 }

我希望我将同姓的学生分组,并返回姓氏不止一次的姓氏列表。例如,

 Surname
 Bloggs
 Joe
 Bloggs
 Smith
 Tom
 Smith

我的新列表只有

 Bloggs
 Smith

这是我目前正在使用的代码,但是我的linq语句中有一种方法可以指定返回多次出现的姓氏吗?

var res = hldList.GroupBy(hld => hld.MyID).ToList();

foreach(var id in res)
{
    var total = id.Count();
    if(total >1)
    // do something
}

2 个答案:

答案 0 :(得分:3)

SurName上的群组列表,并过滤那些计数大于1的群组:

var duplicateSurNames = ldList.GroupBy(hld => hld.Surname)
                              .Where(g=>g.Count() > 1)
                              .Select(x=>x.Key).ToList();

答案 1 :(得分:2)

hldList
  .GroupBy(hld => hld.SurName)
  .Select(hld => new { key = hld.Key, count = hld.Count() })
  .Where(hld => hld.count > 1)
  .ToList();

如果您不想要计数,可以在最后添加另一个投影:

  .Where(hld => hld.count > 1)
  .Select(hld => hld.key)
  .ToList();