C#3.0新增功能09 LINQ 基础08 支持 LINQ 的 C# 功能

查询表达式
查询表达式使用相似于 SQL 或 XQuery 的声明性语法来查询 IEnumerable 集合。 在编译时,查询语法转换为对 LINQ 提供程序的标准查询运算符扩展方法实现的方法调用。 应用程序经过使用 using 指令指定适当的命名空间来控制范围内的标准查询运算符。 下面的查询表达式获取一个字符串数组,按字符串中的第一个字符对字符串进行分组,而后对各组进行排序。
var query = from str in stringArray
            group str by str[0] into stringGroup
            orderby stringGroup.Key
            select stringGroup;

有关详细信息,请参阅 LINQ 查询表达式html

隐式类型化变量 (var)
可使用 var 修饰符来指示编译器推断并分配类型,而没必要在声明并初始化变量时显式指定类型,以下所示:
var number = 5;
var name = "Virginia";
var query = from str in stringArray
            where str[0] == 'm'
            select str;

声明为 var 的变量与显式指定其类型的变量同样都是强类型。 经过使用 var,能够建立匿名类型,但它只能用于本地变量。 也可使用隐式类型声明数组。express

有关详细信息,请参阅隐式类型局部变量编程

对象和集合初始值设定项
经过对象和集合初始值设定项,初始化对象时无需为对象显式调用构造函数。 初始值设定项一般用在将源数据投影到新数据类型的查询表达式中。 假定一个类名为 Customer,具备公共 Name 和 Phone 属性,能够按下列代码中所示使用对象初始值设定项:
var cust = new Customer { Name = "Mike", Phone = "555-1212" };

继续咱们的 Customer 类,假设有一个名为 IncomingOrders 的数据源,而且每一个订单具备一个较大的 OrderSize,咱们但愿基于该订单建立新的 Customer。 能够在此数据源上执行 LINQ 查询,并使用对象初始化来填充集合:api

var newLargeOrderCustomers = from o in IncomingOrders
                            where o.OrderSize > 5
                            select new Customer { Name = o.Name, Phone = o.Phone };

数据源可能具备比 Customer 类更多的属性,例如 OrderSize,但执行对象初始化后,从查询返回的数据被定型为所需的数据类型;咱们选择与咱们的类相关的数据。 所以,咱们如今有填充了咱们想要的多个新 Customer 的 IEnumerable。 上述代码也可使用 LINQ 的方法语法编写:数组

var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select(y => new Customer { Name = y.Name, Phone = y.Phone });

 

匿名类型

匿名类型由编译器构造,且类型名称只可用于编译器。 匿名类型提供一种在查询结果中对一组属性临时分组的简便方法,无需定义单独的命名类型。 使用新的表达式和对象初始值设定项初始化匿名类型,以下所示:ide

select new {name = cust.Name, phone = cust.Phone};

有关详细信息,请参阅匿名类型函数

扩展方法

扩展方法是一种可与类型关联的静态方法,所以能够像实例方法那样对类型调用它。 实际上,利用此功能,能够将新方法“添加”到现有类型,而不会实际修改它们。 标准查询运算符是一组扩展方法,它们为实现 IEnumerable<T> 的任何类型提供 LINQ 查询功能。ui

有关详细信息,请参阅扩展方法spa

Lambda 表达式

Lambda 表达式是一种内联函数,该函数使用 => 运算符将输入参数与函数体分离,而且能够在编译时转换为委托或表达式树。 在 LINQ 编程中,在对标准查询运算符进行直接方法调用时,会遇到 lambda 表达式。code

有关详细信息,请参见:

其余技术请参阅

 

相关文章
相关标签/搜索