C# 连接3个或更多表
我有一个数据库,并以实体框架为模型连接到Visual Studio 2017。在数据库中,有一些表连接到另一个表。如表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 =>
选择\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;容易多了。