은 무엇에 대한 쿼리 것 가입?엔티티 프레임 워크 쿼리
var serv = (from s in db.Services
join sl in Location on s.id equals sl.id
where sl.id = s.id
select s).ToList();
하지만 잘못 :
이 내가 쓴 것입니다. 어떤 사람이 나를 길로 인도 할 수 있습니까?
은 무엇에 대한 쿼리 것 가입?엔티티 프레임 워크 쿼리
var serv = (from s in db.Services
join sl in Location on s.id equals sl.id
where sl.id = s.id
select s).ToList();
하지만 잘못 :
이 내가 쓴 것입니다. 어떤 사람이 나를 길로 인도 할 수 있습니까?
from s in db.Services
join sa in db.ServiceAssignments on s.Id equals sa.ServiceId
where sa.LocationId == 1
select s
여기에서 db
은 DbContext
입니다. 생성 된 쿼리는 다음과 같이 표시됩니다 (EF6 샘플).
SELECT [Extent1].[Id] AS [Id]
-- other fields from Services table
FROM [dbo].[Services] AS [Extent1]
INNER JOIN [dbo].[ServiceAssignments] AS [Extent2]
ON [Extent1].[Id] = [Extent2].[ServiceId]
WHERE [Extent2].[LocationId] = 1
왼쪽 외부 조인이 아닌가요? –
@JonathanWood 아니요, 내부 결합입니다. 왼쪽 외부 조인은 그룹 조인에 의해 생성됩니다. –
db.Services에서 s를 사용할 수 있습니까? db.ServiceAssignments in s.Id와 sa.ServiceId ** ||를 결합하십시오. s.Id = null ** where sa.LocationId == 1 select –
탐색 속성을 사용할 수있는 경우 사용할 수 있습니다. SQL에 내부 조인을 생성합니다.
사람이 방법 구문에 관심있는 경우from s in db.Services
where s.ServiceAssignment.LocationId == 1
select s
당신이 탐색 속성이있는 경우, 그것은 방법 쉽게 :
db.Services.Where(s=>s.ServiceAssignment.LocationId == 1);
당신이하지 않으면 내가 모르고있어 일부 Join()
재정이 아니라면 나는 꽤 밥맛 보이는 생각 (그리고 나는이 방법 구문 순정이야) :이
db.Services.Join(db.ServiceAssignments,
s => s.Id,
sa => sa.ServiceId,
(s, sa) => new {service = s, asgnmt = sa})
.Where(ssa => ssa.asgnmt.LocationId == 1)
.Select(ssa => ssa.service);
ServiceAssignment에 대한 FK가 nullable 일 경우이 작업이 수행되지 않습니다. (ssa => ssa.alert.LocationId == 1) .Select (ssa => ssa.service); , 그렇지? – Cardin
@Cardin 그 경우에는 C# 6을 제안하겠습니까? 운영자. 가지고 있지 않다면 탐색 속성을 사용하기 전에 null을 확인하십시오. 일반적으로, 예에서 방어 코드를 추가하지 않으므로 기본 포인트를 혼동하지 않습니다. FK가 nullable이면 다음과 같이 보일 것입니다 : (C# 6) 'db.Services.Where (s = .ServiceAssignment.LocationId == 1); ' 또는 C# 5의 다음과 같습니다 : 'db.Services.Where (s => s.ServiceAssignment! = null && s.ServiceAssignment.LocationId == 1); ' –
@ MichaelBlackburn 사실입니다! 그것은 더 이해할 수 있습니다. 해명 해줘서 고마워. :) – Cardin
봐 : HTTP : //stackoverflow.com/questions/37324/what-is-the-syntax-for-an-inner-join-in-linq-to-sql –
당신은 '=='비교 대신에'='할당을 사용하고 있습니다. 'where' 절. 또한 해당 필드에 이미 참여한 경우에는 필요하지 않습니다. –
'where sl.id = s.id'가 조인 조건과 중복되지 않습니까? –