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

EF Core一对多关系中如何根据传入枚举列表查询匹配记录

实现代码

直接修改你的方法如下即可:

public IQueryable<FormaContato> GetAllByAplicacao(List<AplicacaoEnum> aplicacaoList = null)
{
    var query = DbSet
        .Include(x => x.FormaContatoAplicacoes)
        .AsNoTracking();

    // 仅当传入了有效枚举列表时才加过滤条件
    if (aplicacaoList != null && aplicacaoList.Any())
    {
        query = query.Where(x => 
            // 匹配关联表中存在任意AplicacaoId在传入枚举列表内的记录
            x.FormaContatoAplicacoes.Any(fca => aplicacaoList.Contains(fca.AplicacaoId))
        );
    }

    return query;
}
逻辑说明
  • 因为FormaContatoAplicacoes是一对多的集合导航属性,不能直接访问单个元素的属性,需要用Any方法判断集合内是否存在符合条件的元素,对应你原生SQL里的INNER JOIN逻辑。
  • aplicacaoList.Contains(fca.AplicacaoId)会被EF自动转换为SQL的WHERE "fca"."AplicacaoId" IN (1,2...)语句,枚举类型会自动映射为对应的int底层值,和你期望的原生SQL逻辑完全一致。
  • 提前判断枚举列表是否为空的逻辑,避免生成IN ()的非法SQL,同时如果不需要过滤时可以返回全量数据,符合可选参数的设计预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:45:03