更新:2007 年 11 月
您不会在查询语法中直接用到 Lambda 表达式,但会在方法调用中用到这些表达式,并且查询表达式可以包含方法调用。事实上,某些查询操作只能用方法语法表示。有关查询语法和方法语法之间的区别的更多信息,请参见
示例
下面的示例演示如何通过使用
C# | 复制代码 |
---|---|
class SimpleLambda { static void Main() { // Data source. int[] scores = { 90, 71, 82, 93, 75, 82 }; // The call to Count forces iteration of the source int highScoreCount = scores.Where(n => n > 80).Count(); Console.WriteLine("{0} scores are greater than 80", highScoreCount); // Outputs: 4 scores are greater than 80 } } |
下面的示例演示如何在查询表达式的方法调用中使用 Lambda 表达式。Lambda 是必需的,因为无法使用查询语法来调用
查询首先按 GradeLevel 枚举中定义的方式,依据学生的成绩等级对学生进行分组。然后,对于每个组,查询将添加每名学生的总分。这需要两个 Sum 运算。内部的 Sum 计算每名学生的总分,外部的 Sum 保留该组中所有学生的运行合并总计。
C# | 复制代码 |
---|---|
private static void TotalsByGradeLevel() { // This query retrieves the total scores for First Year students, Second Years, and so on. // The outer Sum method uses a lambda in order to specify which numbers to add together. var categories = from student in students group student by student.Year into studentGroup select new { GradeLevel = studentGroup.Key, TotalScore = studentGroup.Sum(s => s.ExamScores.Sum()) }; // Execute the query. foreach (var cat in categories) { Console.WriteLine("Key = {0} Sum = {1}", cat.GradeLevel, cat.TotalScore); } } /* Outputs: Key = SecondYear Sum = 1014 Key = ThirdYear Sum = 964 Key = FirstYear Sum = 1058 Key = FourthYear Sum = 974 */ |
编译代码
若要运行此代码,请将方法复制并粘贴到如何:查询对象集合(C# 编程指南)中提供的 StudentClass 中,并从 Main 方法中调用它。