跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Entity Framework Core怎么使用LINQ EF Core Lambda表达式查询方法

Entity Framework Core 中 LINQ 查询核心是 DbSet 的扩展方法配合 Lambda 表达式构建可翻译为 SQL 的 IQueryable;Where 过滤、Select 投影、OrderBy 排序、Skip/Take 分页等均需在终结方法前保持 IQueryable 状态,否则转为内存操作。 Entity Framework Core 中使用 LINQ 和 Lambda 表达式查询,核心是通过
DbSet
提供的扩展方法(如
Where
Select
OrderBy
等)配合 Lambda 表达式来构建类型安全、可组合的查询。EF Core 会将这些表达式树翻译成 SQL,在数据库端执行,而不是在内存中处理。 基础查询:Where + Lambda 过滤数据 最常用的是用
Where
方法配合 Lambda 表达式做条件筛选。Lambda 参数代表集合中的单个实体,返回
bool
值决定是否保留该条目。 例如查所有状态为 "Active" 的用户:
var activeUsers = context.Users.Where(u => u.Status == "Active").ToList();
注意:
Where
返回的是
IQueryable
,不会立即执行;调用
ToList()
FirstOrDefault()
等终结方法才会触发 SQL 查询。 链式组合:多条件与复杂逻辑 Lambda 表达式支持 &&、||、!、括号分组,也支持导航属性访问(只要关系已正确配置),EF Core 能将其转为 JOIN 或子查询。 多个条件用
&&
(对应 SQL AND):
Where(u => u.IsActive && u.CreatedDate > DateTime.Today.AddDays(-7))
模糊匹配用
Contains
(生成 LIKE %...%):
Where(u => u.Name.Contains("张"))
关联查询(如查用户及其订单):
context.Users.Where(u => u.Orders.Any(o => o.Total > 100))
空值安全写法:
Where(u => u.Email != null && u.Email.EndsWith("@gmail.com"))
投影与转换:Select + Lambda 提取字段 用
Select
配合 Lambda 可只取需要的字段或构造新对象(匿名类型或 DTO),减少网络传输和内存占用。 MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 例如只取用户名和 邮箱 :
var namesAndEmails = context.Users .Where(u => u.IsActive) .Select(u => new { u.Name, u.Email }) .ToList();
也可以映射到已定义的类(需确保构造函数或属性可被 EF Core 解析):
.Select(u => new UserSummary { Name = u.Name, Email = u.Email })
排序、分页与聚合:OrderBy、Skip/Take、Count 等 这些方法同样接受 Lambda 表达式指定排序键或聚合依据: 升序:
OrderBy(u => u.CreatedDate)
;降序:
OrderByDescending(u => u.Score)
分页(跳过前 20 条,取下 10 条):
Skip(20).Take(10)
统计数量:
Count(u => u.Status == "Inactive")
(生成 COUNT(*) WHERE ...) 是否存在:
Any(u => u.Email == inputEmail)
(生成 EXISTS 或 SELECT 1) 注意:分页必须配合排序使用(否则结果不稳定),且
Skip
/
Take
在 SQL Server/PostgreSQL 中会被翻译为
OFFSET FETCH
LIMIT OFFSET
,MySQL 8.0+ 同样支持。 基本上就这些。关键点是——Lambda 写在
IQueryable
上,EF Core 才能翻译;一旦调用了
AsEnumerable()
ToList()
,后续操作就在内存中进行,无法利用数据库能力。

相关文章