C# 使用Linq连接同一表中的多个列
我想将下面的sql查询转换为Linq to sqlC# 使用Linq连接同一表中的多个列,c#,sql,linq,C#,Sql,Linq,我想将下面的sql查询转换为Linq to sql select distinct r.CompanyLogo, j.JobName, j.JobId, ur.UserId, r.JobSeekerID , ur.FirstName, j.JobType, j.JobCareerLevel, j.JobLocation from UserInterest m join job j on m.FunctionalId = j.FunctionId or m.Careerlevel = j.Carr
select distinct r.CompanyLogo, j.JobName, j.JobId, ur.UserId, r.JobSeekerID
, ur.FirstName, j.JobType, j.JobCareerLevel, j.JobLocation
from UserInterest m
join job j on m.FunctionalId = j.FunctionId or m.Careerlevel = j.CarrerLevelId or m.SalId = j.SalaryRangeId
join UserRegistration ur on j.UserId = ur.UserId
join EmplrRegistration r on j.UserId = r.JobSeekerID
where m.Status = 1 and m.UserId = 1
我已经试过了,但没有成功
var list = (from m in entities.UserInterests
from j in entities.Jobs
where m.FunctionalId == j.FunctionId || m.SalId == j.SalaryRangeId || m.Careerlevel == j.CarrerLevelId
&& m.Status == true && m.UserId == 1
join ur in entities.UserRegistrations on m.UserId equals ur.UserId
join r in entities.EmplrRegistrations on m.UserId equals r.JobSeekerID
select new { r.CompanyLogo, j.JobName, j.JobId, ur.UserId, r.JobSeekerID
, ur.FirstName, j.JobType, j.JobCareerLevel, j.JobLocation }).Distinct().ToList();
编辑:
下面的查询是针对Svyatoslav Danyliv答案生成的,该答案返回7行而不是6行
SELECT 1 AS [C1], [Extent4].[CompanyLogo] AS [CompanyLogo], [Extent2].[JobName] AS [JobName]
,[Extent2].[JobId] AS [JobId], [Extent3].[UserId] AS [UserId]
,[Extent4].[JobSeekerID] AS [JobSeekerID], [Extent3].[FirstName] AS [FirstName]
,[Extent2].[JobType] AS [JobType], [Extent2].[JobCareerLevel] AS [JobCareerLevel]
,[Extent2].[JobLocation] AS [JobLocation]
FROM [dbo].[UserInterest] AS [Extent1]
INNER JOIN [dbo].[Job] AS [Extent2] ON ([Extent1].[FunctionalId] = [Extent2].[FunctionId])
OR (([Extent1].[FunctionalId] IS NULL) AND ([Extent2].[FunctionId] IS NULL))
OR ([Extent1].[Careerlevel] = [Extent2].[CarrerLevelId])
OR (([Extent1].[Careerlevel] IS NULL) AND ([Extent2].[CarrerLevelId] IS NULL))
OR ([Extent1].[SalId] = [Extent2].[SalaryRangeId])
OR (([Extent1].[SalId] IS NULL)
AND ([Extent2].[SalaryRangeId] IS NULL))
INNER JOIN [dbo].[UserRegistration] AS [Extent3] ON [Extent2].[UserId] = [Extent3].[UserId]
INNER JOIN [dbo].[EmplrRegistration] AS [Extent4] ON [Extent2].[UserId] = [Extent4].[JobSeekerID]
WHERE (1 = [Extent1].[Status]) AND (1 = [Extent1].[UserId])
不仅包含和表达式的连接可以通过实体中的x通过
进行。其中(x=>…)
。你已经做了部分,并在何处条件下犯了错误
已更正的查询,看起来与原始SQL相同
var查询=
来自实体中的m.UserInterests
来自entities.Jobs.Where中的j(j=>
m、 functionad!=null&&m.functionad==j.functionaid ||
m、 Careerlevel!=null&&m.Careerlevel==j.CarrerLevel | |
m、 SalId!=null&&m.SalId==j.SalaryRangeId)
在entities.UserRegistrations上加入ur。UserId等于ur.UserId
在entities.EmplorRegistrations中加入r。用户ID等于r.JobSeekerID
其中m.Status==true&&m.UserId==1
选择新{r.CompanyLogo、j.JobName、j.JobId、ur.UserId、r.JobSeekerID
,ur.FirstName,j.JobType,j.JobCareerLevel,j.JobLocation};
var list=query.Distinct().ToList();
更正了连接条件,遗漏了您使用了notj
别名。仍然存在一些问题。。sql查询返回6行,而这返回7行。请注意,当我从sql查询中删除distinct关键字时,sql查询也会返回7行。我看不到差异。也许用生成的SQL更新您的问题?非常好的id。。上面提到的查询实际上返回了10行。。我知道您在使用distinct关键字将查询返回到list时已经处理了这个问题,然后返回7行。我的建议可能会对您有所帮助。