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

如何用LINQ Lambda实现按LocationId列表查询关联的Matrix记录

问题解决:关联查询的LINQ Lambda等价写法

需求概述

Matrix与Location为父子架构,通过中间表LocationMatrices关联。需传入一组LocationId整数列表,返回对应的Matrix记录。

已知可正常运行的查询语法LINQ示例

假设你的查询语法代码如下(基于EF上下文):

var targetLocationIds = new List<int> { 101, 102, 103 };

var validMatrices = from matrix in dbContext.Matrices
                    join locationMatrix in dbContext.LocationMatrices
                      on matrix.Id equals locationMatrix.MatrixId
                    where targetLocationIds.Contains(locationMatrix.LocationId)
                    select matrix;

等价的LINQ Lambda写法

写法1:显式Join(与查询语法一一对应)

完全匹配查询语法的Lambda实现,通过Join方法显式关联两张表:

var targetLocationIds = new List<int> { 101, 102, 103 };

var validMatrices = dbContext.Matrices
    .Join(
        dbContext.LocationMatrices,
        matrix => matrix.Id, // 左表(Matrices)的关联键
        locationMatrix => locationMatrix.MatrixId, // 右表(LocationMatrices)的关联键
        (matrix, locationMatrix) => new { Matrix = matrix, LocationMatrix = locationMatrix } // 关联后返回的临时对象
    )
    .Where(joined => targetLocationIds.Contains(joined.LocationMatrix.LocationId)) // 过滤符合条件的LocationId
    .Select(joined => joined.Matrix); // 最终返回Matrix记录

写法2:利用导航属性简化(更简洁)

如果你的Matrix实体已经配置了指向LocationMatrices的导航属性(比如public ICollection<LocationMatrix> LocationMatrices { get; set; }),可以用Any方法简化逻辑,生成的SQL通常更高效:

var targetLocationIds = new List<int> { 101, 102, 103 };

var validMatrices = dbContext.Matrices
    .Where(matrix => matrix.LocationMatrices
        .Any(lm => targetLocationIds.Contains(lm.LocationId)));

可选:去重处理

如果一个Matrix关联多个符合条件的Location,上述两种写法可能返回重复的Matrix记录,可添加Distinct()去重:

// 写法1添加去重
var validMatrices = dbContext.Matrices
    .Join(...)
    .Where(...)
    .Select(...)
    .Distinct();

// 写法2添加去重
var validMatrices = dbContext.Matrices
    .Where(...)
    .Distinct();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:22:45