我有一个学生类型的对象列表。
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
}
答案 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();