LINQ Group Query

1.按照第一个字母进行分组

		static void Main()
		{
			string[] words = { "blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese" };
			var wordGroupByFirstLetter =
										from word in words
										group word by word[0] into w
										orderby w.Key
										select w;
			foreach (var groupedWord in wordGroupByFirstLetter)
			{
				Console.WriteLine("word that start with letter is {0}",groupedWord.Key);
				foreach (var word in groupedWord)
				{
					Console.WriteLine("{0}", word);
				}
			}
		}

2.按照平均分大于80的

public class Student
    {
        public string First { get; set; }
        public string Last { get; set; }
        public int ID { get; set; }
        public List<int> Scores;
    }
    class Program
    {
		public static List<Student> GetStudents()
		{
			List<Student> students = new List<Student>
			{
			   new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 72, 81, 60}},
			   new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}},
			   new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {99, 89, 91, 95}},
			   new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {72, 81, 65, 84}},
			   new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {97, 89, 85, 82}} 
			};
			return students;
		}
		static void Main(string[] args)
		{
			List<Student> students = GetStudents();
			var boolenGroupQuery =
							from student in students
							group student by student.Scores.Average() > 80;

			foreach (var boolAverage in boolenGroupQuery)
			{
				Console.WriteLine("{0}", boolAverage.Key == true ? "High Average" : "Low Average");
				foreach (var student in boolAverage)
				{
					Console.WriteLine("First:{0},last:{1},Average:{2}", student.First, student.Last, student.Scores.Average());
				}
			}
		}


 

### C# 中 LINQGroup By 使用方法 在 C# 中,`group by` 是一种强大的查询操作符,用于按照指定的关键字对数据集合中的元素进行分组。通过 `group by`,可以轻松实现基于某些条件的数据分类和聚合。 #### 基本语法 以下是使用 LINQ 查询表达式执行 `group by` 操作的基本语法: ```csharp from element in source group element by key into g select new { Key = g.Key, Elements = g } ``` 其中: - `element` 表示源集合中的单个项。 - `source` 是要查询的集合对象。 - `key` 定义了按什么字段或属性来分组。 - `g` 是一个临时变量,表示当前分组的结果集。 #### 方法语法 除了查询表达式外,还可以使用方法语法完成相同的功能: ```csharp source.GroupBy(element => keySelector) .Select(g => new { Key = g.Key, Elements = g }); ``` 这里 `GroupBy` 接受一个函数作为参数,该函数定义如何提取键值以决定哪些项目属于同一组[^1]。 #### 示例代码 下面是一个具体的例子展示如何利用 `group by` 对学生列表按年级进行分组: ```csharp class Student { public string Name { get; set; } public int GradeLevel { get; set; } // 年级等级 (e.g., 9th grade -> 9) } List<Student> students = new List<Student>() { new Student() { Name="Alice", GradeLevel=9 }, new Student() { Name="Bob", GradeLevel=10}, new Student() { Name="Charlie", GradeLevel=9} }; // Query Syntax Example var querySyntaxResult = from student in students group student by student.GradeLevel; foreach(var group in querySyntaxResult){ Console.WriteLine($"Grade Level: {group.Key}"); foreach(Student s in group){ Console.WriteLine(s.Name); } } // Method Syntax Example var methodSyntaxResult = students .GroupBy(student => student.GradeLevel); foreach(var group in methodSyntaxResult){ Console.WriteLine($"Grade Level: {group.Key}"); foreach(Student s in group){ Console.WriteLine(s.Name); } } ``` 上述程序会输出两个部分的内容:一个是每一年级的学生姓名;另一个则是同样的逻辑但是采用不同的方式书写出来[^2]。 #### 高级应用——带聚合计算 如果希望不仅仅只是简单地分组,还想要做一些统计工作(如求平均数),可以通过附加 `.Select()` 来扩展功能: ```csharp var avgScoresPerGrade = grades.GroupBy(grade => grade.StudentId) .Select(groupedGrades => new { StudentID = groupedGrades.Key, AverageScore = groupedGrades.Average(x=>x.Score)}); ``` 此片段展示了如何先对学生分数记录依据学生的 ID 进行分组,再进一步计算每位同学的成绩均值。 ### 总结 C# 提供了灵活多样的工具支持开发者高效处理复杂业务需求下的数据整理任务。“LINQ”的核心优势在于它能够无缝衔接各种不同类型的资料库以及内存内的物件结构体,从而极大简化开发流程并提升可读性和维护便利度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值