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

如何在LINQ多表Join语句中添加额外过滤条件?

LINQ连接Table2时添加额外条件的正确方式

你直接在join语句的on后面加&& t2.Active=true会报错,因为LINQ的join语法要求on后面只能是键的相等匹配,不能直接附加逻辑条件。你可以用以下两种方法实现需求:

方法1:在Join中使用复合键(连接阶段直接过滤)

通过创建匿名类型,把Id相等和Active=true作为连接的复合条件,这样就能在连接时就过滤掉非Active的t2记录:

var Result = (
    from t1 in dbContext.Table1
    join t2 in dbContext.Table2 
        on new { t1.Id, Active = true } equals new { t2.Id, t2.Active }
    join t3 in dbContext.Table3 on t1.Id equals t3.Id
    where t1.CategoryUId == Input.CategoryUId
    select new CategoryInfo
    {
        Table1ID = t1.Id,
        Table1Name = t1.Name,
        TableTypeUid = t1.TypeUId,
        ProductName = t2.ProductName,
        BrandName = t3.BrandName
    }
).ToList();

方法2:先连接再过滤(可读性更强)

先完成t1和t2的基础连接,再用where子句过滤t2的Active状态,这种写法更直观易懂:

var Result = (
    from t1 in dbContext.Table1
    join t2 in dbContext.Table2 on t1.Id equals t2.Id
    join t3 in dbContext.Table3 on t1.Id equals t3.Id
    where t1.CategoryUId == Input.CategoryUId && t2.Active == true
    select new CategoryInfo
    {
        Table1ID = t1.Id,
        Table1Name = t1.Name,
        TableTypeUid = t1.TypeUId,
        ProductName = t2.ProductName,
        BrandName = t3.BrandName
    }
).ToList();

另外注意你原代码的where开头多了个多余的&&,记得删掉,否则也会引发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:40:00