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

含Where子查询的LINQ语句编写求助:跨库关联查询场景

没问题,我来帮你捋清楚这个嵌套查询的写法!先结合你的表结构,假设你想要的是从tAccessRequest中筛选出对应CardNo在tBadge里满足特定状态(比如CardStatus为有效)的请求记录——这应该是这类场景最常见的需求,下面给你两种LINQ写法,都用到了嵌套的Where逻辑:

1. 方法语法(更贴合嵌套Where的写法)

如果你习惯链式调用的写法,可以这样实现:

// 假设db1是数据库1的上下文,db2是数据库2的上下文
var targetRequests = db1.tAccessRequest
    .Where(request => 
        // 嵌套查询:检查当前请求的CardNo是否在tBadge中存在符合状态的记录
        db2.tBadge
            .Where(badge => badge.CardNo == request.CardNo && badge.CardStatus == "有效")
            .Any() // 判断是否存在匹配的Badge
    );

这里的逻辑是:遍历每一条tAccessRequest,通过嵌套的Where先筛选出同CardNo且状态符合要求的tBadge记录,再用Any()确认是否存在这样的Badge——如果存在,就保留这条请求。

如果你想简化一点,也可以把嵌套的Where直接合并到Any()的条件里,效果完全一样:

var targetRequests = db1.tAccessRequest
    .Where(request => 
        db2.tBadge.Any(badge => badge.CardNo == request.CardNo && badge.CardStatus == "有效")
    );

2. 查询语法(SQL风格,更直观)

如果你偏好SQL式的写法,对应的嵌套查询如下:

var targetRequests = from request in db1.tAccessRequest
                     where (
                         from badge in db2.tBadge
                         where badge.CardNo == request.CardNo && badge.CardStatus == "有效"
                         select badge
                     ).Any()
                     select request;

这种写法和SQL里的EXISTS子查询逻辑几乎一致,可读性很强。

额外提示

  • 确保两个表的CardNo数据类型完全一致,否则会出现匹配失败的问题;
  • 如果你的CardStatus是枚举类型,把示例中的字符串"有效"换成对应的枚举值即可(比如badge.CardStatus == CardStatus.Active);
  • 要是你需要同时获取Request和对应的Badge信息,可以考虑用Join,但既然你明确要求用Where嵌套,上面的写法就完全符合需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:08:30