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

C# LINQ三表内连接查询的条件语法问题排查

LINQ多表内连接问题解决

需求与对应SQL

需要编写LINQ实现三个表的内连接,三个表彼此关联,对应的可正常执行的SQL语句如下:

SELECT * FROM [Table1]
JOIN [Table2]
    ON [Table1_Id] = [Table2_T1_Id]
JOIN [Table3]
    ON [Table1_Type_Id] = [Table3_Type_Id]
    AND [Table2_Value_Id] = [Table3_Value_Id]
WHERE [Table1_Id] IN idsList
ORDER BY[Table1_Id], [Table2_Id];

错误的LINQ实现及报错

编写的LINQ代码出现报错,代码如下:

var results = from a in context.TableA
            join b in context.TableB
            on a.TableA_Id equals b.TableB_TA_Id into ab
            join c in context.TableC
            on new { a.TableA_Type_Id, ab.TableB_Value_Id }        // 错误指向此行
            equals { c.TableC_Type_Id, c.TableC_Value_Id } into abc
            where idsList.Contains(abc.TableA_Id)
            select new
            {
              // 此处列出需要获取的各项值
            };

报错信息(CS1061):

'IEnumerable<TableB>' does not contain a definition for 'TableB_Value_Id' and no accessible extension
    method 'TableB_Value_Id' accepting a first argument of type 'IEnumerable<TableB>' could be found
    (are you missing a using directive or an assembly reference?)

尝试将问题行修改为:

on new { a.TableA_Type_Id, b.TableB_Value_Id }

则出现新报错:

The name 'b' does not exist in the current context

也曾尝试为匿名类型字段添加标签:

on new { j = a.TableA_Type_Id, k = b.TableB_Value_Id }
equals { j = c.TableC_Type_Id, k = c.TableC_Value_Id } into abc

但以上修改均未解决问题。

最终解决方案

移除into xx子句,并为匿名类型的匹配字段添加一致的标签,最终可正常运行的LINQ代码如下:

var results = from a in context.TableA
            join b in context.TableB
            on a.TableA_Id equals b.TableB_TA_Id
            join c in context.TableC
            on new { j = a.TableA_Type_Id, k = b.TableB_Value_Id }
            equals new { j = c.TableC_Type_Id, k = c.TableC_Value_Id }
            where idsList.Contains(a.TableA_Id)
            select new
            {
              // 此处列出需要获取的各项值
            };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:10:41