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

如何将指定多表关联SQL转换为Entity Framework的Lambda表达式

Entity Framework 对应Lambda转换结果

基础链式Join写法(无需配置导航属性)

该写法不依赖实体间的导航关系配置,直接对应原始SQL的JOIN逻辑:

// 固定匹配参数
var targetErpId = Guid.Parse("5221be90-3d97-46fa-9562-4ff9d910c14d");
var targetMerchantId = Guid.Parse("5fb34a5d-e7ee-49a8-a8e3-3df9e9027c39");

var queryResult = dbContext.Extracts
    // 关联ErpExtract表
    .Join(
        dbContext.ErpExtracts.Where(ee => ee.ErpId == targetErpId),
        extract => extract.Id,
        erpExtract => erpExtract.ExtractId,
        (extract, erpExtract) => new { extract, erpExtract }
    )
    // 关联ExtractSql表
    .Join(
        dbContext.ExtractSqls,
        preJoin => preJoin.erpExtract.Id,
        extractSql => extractSql.ErpExtractId,
        (preJoin, extractSql) => new { preJoin.extract, extractSql }
    )
    // 关联ExtractMerchant表
    .Join(
        dbContext.ExtractMerchants.Where(em => em.MerchantId == targetMerchantId),
        preJoin => preJoin.extractSql.Id,
        extractMerchant => extractMerchant.ExtractSqlId,
        (preJoin, extractMerchant) => new 
        {
            Id = preJoin.extract.Id,
            Name = preJoin.extract.Name,
            Sql = preJoin.extractSql.Sql,
            Version = preJoin.extractSql.Version
        }
    )
    .ToList();

提示:如果你的实体Id字段为字符串类型,直接去掉Guid.Parse方法,直接传入字符串格式的Id即可。

导航属性优化写法(推荐)

如果你的实体类已经配置了正确的关联导航属性,可使用更简洁的写法,EF会自动生成等价的JOIN语句:

var targetErpId = Guid.Parse("5221be90-3d97-46fa-9562-4ff9d910c14d");
var targetMerchantId = Guid.Parse("5fb34a5d-e7ee-49a8-a8e3-3df9e9027c39");

var queryResult = dbContext.Extracts
    .Where(e => e.ErpExtracts.Any(ee => 
        ee.ErpId == targetErpId 
        && ee.ExtractSql.ExtractMerchants.Any(em => em.MerchantId == targetMerchantId)))
    .Select(e => new 
    {
        Id = e.Id,
        Name = e.Name,
        Sql = e.ErpExtracts.First(ee => ee.ErpId == targetErpId).ExtractSql.Sql,
        Version = e.ErpExtracts.First(ee => ee.ErpId == targetErpId).ExtractSql.Version
    })
    .ToList();

内容的提问来源于stack exchange,提问作者Rodrigo Lopes Fávaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 02:45:07