C# Linq中常用分组聚合处理

Model类:

 public class StudentScore
    {

        public int ID { set; get; }
        public string Name { set; get; }
        public string Course { set; get; }
        public int Score { set; get; }
        public string Term { set; get; }
    }

 public class Person
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string Name => FirstName + LastName;


    }

测试
Demo:

 public static void TestLinq01() {

            //1.准备数据源
            List<StudentScore> list = new List<StudentScore>() {
                new StudentScore(){ID=1,Name="张三",Term="第一学期",Course="Math",Score=80},
                new StudentScore(){ID=1,Name="张三",Term="第一学期",Course="Chinese",Score=90},
                new StudentScore(){ID=1,Name="张三",Term="第一学期",Course="English",Score=70},
                new StudentScore(){ID=2,Name="李四",Term="第一学期",Course="Math",Score=60},
                new StudentScore(){ID=2,Name="李四",Term="第一学期",Course="Chinese",Score=70},
                new StudentScore(){ID=2,Name="李四",Term="第一学期",Course="English",Score=30},
                new StudentScore(){ID=3,Name="王五",Term="第一学期",Course="Math",Score=100},
                new StudentScore(){ID=3,Name="王五",Term="第一学期",Course="Chinese",Score=80},
                new StudentScore(){ID=3,Name="王五",Term="第一学期",Course="English",Score=80},
                new StudentScore(){ID=4,Name="赵六",Term="第一学期",Course="Math",Score=90},
                new StudentScore(){ID=4,Name="赵六",Term="第一学期",Course="Chinese",Score=80},
                new StudentScore(){ID=4,Name="赵六",Term="第一学期",Course="English",Score=70},
                new StudentScore(){ID=1,Name="张三",Term="第二学期",Course="Math",Score=100},
                new StudentScore(){ID=1,Name="张三",Term="第二学期",Course="Chinese",Score=80},
                new StudentScore(){ID=1,Name="张三",Term="第二学期",Course="English",Score=70},
                new StudentScore(){ID=2,Name="李四",Term="第二学期",Course="Math",Score=90},
                new StudentScore(){ID=2,Name="李四",Term="第二学期",Course="Chinese",Score=50},
                new StudentScore(){ID=2,Name="李四",Term="第二学期",Course="English",Score=80},
                new StudentScore(){ID=3,Name="王五",Term="第二学期",Course="Math",Score=90},
                new StudentScore(){ID=3,Name="王五",Term="第二学期",Course="Chinese",Score=70},
                new StudentScore(){ID=3,Name="王五",Term="第二学期",Course="English",Score=80},
                new StudentScore(){ID=4,Name="赵六",Term="第二学期",Course="Math",Score=70},
                new StudentScore(){ID=4,Name="赵六",Term="第二学期",Course="Chinese",Score=60},
                new StudentScore(){ID=4,Name="赵六",Term="第二学期",Course="English",Score=70},
            };

            //2.根据姓名进行分组,然后Sum求总分,Average求平均分
          var studentScores= list.GroupBy(x => x.Name)
                .Select(x => new { Name = x.Key, Scores = x.Sum(s => s.Score),Courses=x.Count(),
                    AverageScores=Math.Round(x.Average(s => s.Score))
                });
            //x实际代表的是每个分组后的的数据,key代表的是分组的字段

            //3.根据多个字段进行分组 :根据学期和课程:组装到匿名对象中
         var list1= list.GroupBy(x=>new {Term=x.Term,Course=x.Score})
                .Select(x=> new {Term=x.Key.Term,Course=x.Key.Course,
                    AverageScores=x.Average(s=>s.Score) 
                });
            //这里的key代表的是分组的匿名对象

            //对分组后的数据,进行筛选,在SQL中,用HAVing子句,而Linq中没有
            //采用where语句对Group后的结果过滤。
            //4.分组,带有Having的查询,查询均分>60的学生 
            var list2 = list.GroupBy(x => new { Term = x.Term, Course = x.Score })
                .Where(x=>x.Average(m=>m.Score)>60)
                .Select(x => new {
                    Term = x.Key.Term,
                    Course = x.Key.Course,
                    AverageScores = x.Average(s => s.Score)
                });
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#LINQ(Language Integrated Query)是一种强大的查询语言和操作数据的方式。它提供了一组简洁、一致和可组合的操作符,用于查询和操作各种数据源,如集合、数据库、XML等。以下是一些常见的LINQ写法示例: 1. 查询集合的元素: ```csharp var numbers = new List<int> { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0); foreach (var number in evenNumbers) { Console.WriteLine(number); } ``` 2. 对集合进行排序: ```csharp var numbers = new List<int> { 3, 1, 4, 2, 5 }; var sortedNumbers = numbers.OrderBy(n => n); foreach (var number in sortedNumbers) { Console.WriteLine(number); } ``` 3. 使用投影选择集合的某些属性: ```csharp var persons = new List<Person> { new Person { Name = "Alice", Age = 25 }, new Person { Name = "Bob", Age = 30 }, new Person { Name = "Charlie", Age = 35 } }; var names = persons.Select(p => p.Name); foreach (var name in names) { Console.WriteLine(name); } ``` 4. 使用聚合函数计算集合的统计值: ```csharp var numbers = new List<int> { 1, 2, 3, 4, 5 }; var sum = numbers.Sum(); var average = numbers.Average(); var max = numbers.Max(); var min = numbers.Min(); Console.WriteLine("Sum: " + sum); Console.WriteLine("Average: " + average); Console.WriteLine("Max: " + max); Console.WriteLine("Min: " + min); ``` 这只是LINQ的一小部分功能示例,还有更多的操作符和用法可以探索和应用。请记住,要使用LINQ,你需要引入`System.Linq`命名空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值