Linq使用Lambda表达式实现某列去重

时间:2021-08-13 19:02:33
首先,需要的功能是:

Code Sub Count
Fl001 1 20
Fl002 1 15
Fl001 1 10

结果只需要两条

Code:Fl001,Sub:1,Count:20

Code:Fl002,Sub1;Count:15


需要使用Linq进行去重查询,只返回code相同的第一行数据即可,而使用Distinct()根本无法达到要求,那么

var list = con.Table.GroupBy(r => r.Code).Select(r => r.First());
实际的意思是根据某一列进行分组,然后获取每一组的第一条数据,可以解决此次需求,实际测试结果:

static void Main(string[] args)
{
using(DataClasses1DataContext con = new DataClasses1DataContext())
{
//去重后
List<SZ_Cost> list1 = con.SZ_Cost.Where(r => r.SubjectIds.ToString() == "1").GroupBy(r => r.StudentCode).Select(r => r.First()).ToList();

//未去重
List<SZ_Cost> list2 = con.SZ_Cost.Where(r => r.SubjectIds.ToString() == "1").ToList();

Console.WriteLine("未去重长度:"+list2.Count);
Console.WriteLine("去重后长度:"+list1.Count);

Console.WriteLine("================未去重的编号们===================");
foreach (SZ_Cost c in list2)
{
Console.Write(c.StudentCode+" | ");
}
Console.WriteLine();
Console.WriteLine("================去重后的编号们===================");
foreach (SZ_Cost c in list1)
{
Console.Write(c.StudentCode + " | ");
}
}
Console.ReadLine();
}

Linq使用Lambda表达式实现某列去重