Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq连接同一表中的多个列_C#_Sql_Linq - Fatal编程技术网

C# 使用Linq连接同一表中的多个列

C# 使用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

我想将下面的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.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();

更正了连接条件,遗漏了您使用了not
j
别名。仍然存在一些问题。。sql查询返回6行,而这返回7行。请注意,当我从sql查询中删除distinct关键字时,sql查询也会返回7行。我看不到差异。也许用生成的SQL更新您的问题?非常好的id。。上面提到的查询实际上返回了10行。。我知道您在使用distinct关键字将查询返回到list时已经处理了这个问题,然后返回7行。我的建议可能会对您有所帮助。