查询是从数据源检索数据的表达式。 查询通常以专用查询语言表示,例如 SQL(用于关系数据库)和 XQuery for XML。 因此,开发人员必须了解其查询的每种类型的数据源或数据格式的新查询语言。 Language-Integrated 查询(LINQ)提供了一个更简单、一致的模型,用于处理各种数据源和格式的数据。 在 LINQ 查询中,始终使用编程对象。
LINQ 查询作由三个作组成:获取数据源或源、创建查询和执行查询。
可以通过 LINQ 查询实现 IEnumerable<T> 泛型接口或 IQueryable<T> 泛型接口的数据源。 实现泛型接口的泛型ObjectQuery<T>IQueryable<T>类的实例充当 LINQ to Entities 查询的数据源。
ObjectQuery<T>泛型类表示返回零个或多个类型化对象的集合的查询。 还可以使用 C# 关键字 var (Visual Basic 中的 Dim)让编译器推断实体的类型。
在查询中,请准确指定要从数据源检索的信息。 查询还可以指定在返回信息之前应如何对信息进行排序、分组和调整。 在 LINQ 中,查询存储在变量中。 如果查询返回值序列,则查询变量本身必须是可查询的类型。 此查询变量不执行任何作,不返回任何数据;它只存储查询信息。 创建查询后,必须执行该查询以检索任何数据。
查询语法
LINQ to Entities 查询可以采用两种不同的语法组成:查询表达式语法和基于方法的查询语法。 查询表达式语法是 C# 3.0 和 Visual Basic 9.0 中的新增语法,它由一组用类似于 Transact-SQL 或 XQuery 的声明性语法编写的子句组成。 但是,.NET Framework 公共语言运行时(CLR)无法读取查询表达式语法本身。 因此,在编译时,查询表达式将转换为 CLR 理解的内容:方法调用。 这些方法称为 标准查询运算符。 作为开发人员,可以选择使用方法语法直接调用它们,而不是使用查询语法。 有关详细信息,请参阅 LINQ 中的查询语法和方法语法。
查询表达式语法
查询表达式是声明性查询语法。 此语法使开发人员能够以类似于 Transact-SQL 的格式的高级语言编写查询。 通过使用查询表达式语法,可以使用最少的代码对数据源执行复杂的筛选、排序和分组作。 有关详细信息,请参阅基本查询作(Visual Basic)。 有关如何使用查询表达式语法的示例,请参阅以下主题:
Method-Based 查询语法
撰写 LINQ to Entities 查询的另一种方法是使用基于方法的查询。 基于方法的查询语法是对 LINQ 运算符方法的直接方法调用序列,将 lambda 表达式作为参数传递。 有关详细信息,请参阅 Lambda 表达式。 有关如何使用基于方法的语法的示例,请参阅以下主题: