您的位置:首页 > 其它

在查询中使用 Lambda 表达式

2015-02-25 11:29 471 查看
如何:在查询中使用 Lambda 表达式(C# 编程指南)
更新:2007 年 11 月

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




示例

下面的示例演示如何通过使用 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
*/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: