使用 LINQ 查询数据
学习如何使用 LINQ 查询 EF Core 中的数据。
LINQ 简介
EF Core 使用语言集成查询(LINQ)从数据存储中查询数据。只要数据存储支持 LINQ 提供程序,LINQ 就可以查询多个数据存储中的数据。
查询 是从数据源检索数据的表达式。传统上,我们使用特定的查询语言(如 SQL 或 XQuery)来表达查询,开发者必须为每个应用程序所支持的数据源学习相应的查询语言。
通过为多种数据源提供一致的编程模型,LINQ 简化了开发过程。我们可以使用相同的通用查询表达式模式,对 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据进行查询和转换。
此外,查询返回的结果是对象形式,使开发者能够直接对结果集使用面向对象的技术,而无需担心将不同格式的结果转换为对象。
LINQ 查询的工作原理
使用 LINQ 时,我们可以基于派生的上下文和实体类型,用 C# 编写强类型的查询。在运行时,EF Core 将 LINQ 查询的表示传递给数据库提供程序,数据库提供程序会将 LINQ 查询转换为特定于数据库的查询。
以下是使用 LINQ 可以实现的一些操作:
加载所有数据
1using (var context = new BooksContext()) 2{ 3 var books = context.Books.ToList(); 4}
代码示例中的 第 3 行 从 BooksContext 中获取所有书籍。
加载单个实体
1using (var context = new BooksContext()) 2{ 3 var book = context.Books.Single(b => b.BookId == 2); 4}
代码示例中的 第 3 行 从 BooksContext 中获取一本指定 ID 的书籍。
数据过滤
1using (var context = new BooksContext()) 2{ 3 var book = context.Books 4 .Where(b => b.Title.Contains("Learning")) 5 .ToList(); 6}
代码示例中的 第 3 至 5 行 从 BooksContext 中获取标题包含“Learning”的书籍集合。
使用 LINQ 查询的优势
-
由于减少了编写特定于数据库查询的需求,提高了开发效率并缩短了开发时间。
-
LINQ 使用熟悉且统一的语法来查询各种数据源。
-
LINQ 的层次化特性使表之间的关系一目了然,便于编写涉及多表连接的查询。
-
LINQ 查询操作在数据源、查询本身以及查询执行过程中均具有强类型特性,这种强类型保证了类型错误能在编译时被发现。