C# 连接3个或更多表

C# 连接3个或更多表,c#,sql-server,linq,model-view-controller,C#,Sql Server,Linq,Model View Controller,我有一个数据库,并以实体框架为模型连接到Visual Studio 2017。在数据库中,有一些表连接到另一个表。如表选择\u历史记录到表用户和候选人。但是如何在C#中连接这些表呢 我尝试连接两个表,但当我尝试连接3个表时,我的代码出现了一些问题 List<CandidateInterviewDTO> CandidateInterview = db.CANDIDATEs.Join(db.POSITIONs, candidate =>

我有一个数据库,并以实体框架为模型连接到Visual Studio 2017。在数据库中,有一些表连接到另一个表。如表
选择\u历史记录
到表
用户
候选人
。但是如何在C#中连接这些表呢

我尝试连接两个表,但当我尝试连接3个表时,我的代码出现了一些问题

List<CandidateInterviewDTO> CandidateInterview = db.CANDIDATEs.Join(db.POSITIONs,
                        candidate => candidate.JUDUL_POSISI,
                        position => position.POSITION_ID,
                        (candidate, position) =>
                            new CandidateInterviewDTO
                            {
                                AppliedPosition = db.POSITIONs.FirstOrDefault(p => p.POSITION_ID == candidate.JUDUL_POSISI).POSITION_NAME,
                                SuitablePosition = db.POSITIONs.FirstOrDefault(p => p.POSITION_ID == candidate.SUITABLE_POSITION).POSITION_NAME,
                                Name = candidate.NAMA_LENGKAP,
                                Source = db.SOURCEs.FirstOrDefault(s => s.SOURCE_ID == candidate.SOURCE_ID).SOURCE_NAME,
                                PhoneNumber = candidate.NOHP,
                                Email = candidate.EMAIL
// If i try until this, its work. But when i try the code on below, there is some error with my code. Is it correct ?
                            }).Join(db.SELECTION_HISTORY,
                            candidatePosisition => candidatePosisition,
                            sh => sh.PIC_ID, (candidatePosition, selection) => new CandidateInterviewDTO
                            {
                                Name = db.CANDIDATEs.FirstOrDefault(c => c.NAMA_LENGKAP == candidatePosition.Name).NAMA_LENGKAP,
                                CandidateId = db.SELECTION_HISTORY.FirstOrDefault(sh => sh.PIC_ID == selection.PIC_ID).PIC_ID,
                            });

您正在调用
Join
,然后将结果链接到另一个
Join
调用

第一个调用返回类型为
IQueryable
的结果

因此,当调用第二个联接时,第二个和第三个参数是lambda,它们返回要比较的键。他们返回不同的类型。 -一种类型为
CandidateInterviewDTO
-另一种类型是PIC

与LINQ查询语法相比,通常更喜欢调用链接。然而,当涉及到连接时,查询语法绝对令人满意

以下是如何使用查询语法实现三向联接:

var candidateInterviews = from candidate in db.CANDIDATES
    join position in db.POSITIONS 
        on candidate.JUDUL_POSISI equals position.POSITION_ID
    join selectionHistory in db.SELECTION_HISTORY 
        on position.POSITION_ID equals selectionHistory.PID_ID
    select new CandidateInterviewDTO
    {
        Name = candidate.NAMA_LENGKAP,
        (...)
    }

您正在调用
Join
,然后将结果链接到另一个
Join
调用

第一个调用返回类型为
IQueryable
的结果

因此,当调用第二个联接时,第二个和第三个参数是lambda,它们返回要比较的键。他们返回不同的类型。 -一种类型为
CandidateInterviewDTO
-另一种类型是PIC

与LINQ查询语法相比,通常更喜欢调用链接。然而,当涉及到连接时,查询语法绝对令人满意

以下是如何使用查询语法实现三向联接:

var candidateInterviews = from candidate in db.CANDIDATES
    join position in db.POSITIONS 
        on candidate.JUDUL_POSISI equals position.POSITION_ID
    join selectionHistory in db.SELECTION_HISTORY 
        on position.POSITION_ID equals selectionHistory.PID_ID
    select new CandidateInterviewDTO
    {
        Name = candidate.NAMA_LENGKAP,
        (...)
    }

错误为严重性代码描述项目文件行抑制状态错误CS0411无法从用法推断方法“Queryable.Join(IQueryable,IEnumerable,Expression,Expression,Expression)”的类型参数。尝试显式指定类型参数。请向我们显示您的EF模型,以便我们提供帮助。此外,如果您的EF模型具有关联/导航属性,则只需使用
Include
而不是join;更简单。错误为严重性代码描述项目文件行抑制状态错误CS0411无法从用法推断方法“Queryable.Join(IQueryable,IEnumerable,Expression,Expression,Expression)”的类型参数。尝试显式指定类型参数。请向我们显示您的EF模型,以便我们提供帮助。此外,如果您的EF模型具有关联/导航属性,则只需使用
Include
而不是join;容易多了。