You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将INSERT SELECT联表查询SQL转换为LINQ插入语句

LINQ 实现SELECT结果批量插入的转换方案

你给出的SQL是典型的「关联两表筛选数据后批量写入目标表」的操作,对应等效LINQ实现如下,以最常用的Entity Framework Core场景为例:

核心实现代码

// 1. 构造与SQL逻辑完全一致的关联查询
var licenseRecords = from s in _dbContext.SourceData
                     join p in _dbContext.Person on s.UserID equals p.DomainAccountName
                     where s.isActive == 1
                     select new License
                     {
                         PersonID = p.PersonID,
                         LicenseState = s.LicenseState,
                         LicenseNumber = s.LicenseNumber,
                         LicenseYear = s.LicenseYear
                     };

// 2. 执行批量插入
// EF Core 6+ 版本可直接传入查询对象,EF会自动生成对应的INSERT...SELECT语句在数据库端执行,不会把数据全量加载到应用内存
await _dbContext.License.AddRangeAsync(licenseRecords);
await _dbContext.SaveChangesAsync();

补充说明

  • 上述LINQ中的join为内连接,和你SQL里的JOIN逻辑完全匹配,仅返回两表中关联字段能对应上的记录
  • 如果你需要更高的批量插入性能,可以使用对应ORM的批量操作扩展方法,全程在数据库端执行操作,性能比默认的AddRange更高,示例写法:
// 批量扩展方法示例,无需额外调用SaveChanges,直接执行数据库写入
await _dbContext.License.BulkInsertAsync(licenseRecords);
  • 如果是操作内存中的集合而非数据库表,查询逻辑完全一致,只需要将DbContext对应的表替换为内存集合,最后将查询结果直接AddRange到目标License集合即可。

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:00:50