学习笔记之在查询中使用 Lambda 表达式(C# 编程指南)

如何:在查询中使用 Lambda 表达式(C# 编程指南)

Visual Studio 2013

您不会在查询语法中直接用到 Lambda 表达式,但会在方法调用中用到这些表达式,并且查询表达式可以包含方法调用。 事实上,某些查询操作只能用方法语法表示。 有关查询语法和方法语法之间的区别的更多信息,请参见LINQ 中的查询语法和方法语法 (C#)

下面的示例演示如何通过使用 Enumerable.Where 标准查询运算符在基于方法的查询中使用 Lambda 表达式。 请注意,此示例中的 Where 方法具有一个委托类型为Func<TResult> 的输入参数,并且委托采用整数作为输入并返回布尔值。 可以将 Lambda 表达式转换为该委托。 假若这是使用 Queryable.Where 方法的 LINQ to SQL 查询,则参数类型将为 Expression<Func<int,bool>>,但 Lambda 表达式看起来将完全相同。 有关表达式类型的更多信息,请参见 System.Linq.Expressions.Expression

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 是必需的,因为无法使用查询语法来调用 Sum() 标准查询运算符。

查询首先按 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 方法中调用它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值