2012-12-10 3 views
0

나는 두 개의 테이블이 있습니다LINQ - EF 가입 어려움

단계 :

long ID 
string Name 

다른 활동 : 나는 이미 단계의 이름을 알고

long ID 
string Name 
long PhaseID 

및 나는 그 특정 단계에 대한 활동을 원합니다. 활동 표에 PhaseName을 추가합니까, 아니면 LINQ에서 조인을 통해합니까?

어쩌면 이렇게 될까요?

var query = from a in entities.Activities 
         join p in entities.Phases on a.PhaseId equals p.Id 
         where p.Name == "Preplanning" 

... 그리고 여기에 .. 당신의 도움에 대한

감사를이 쿼리를 완료하는 방법을 잘 메신저!

답변

2

제공 한 코드는 Inner Join을 사용하여 이름이 "사전 계획"인 단계가있는 모든 활동을 찾습니다.
쿼리를 완료하려면 select 절을 추가해야합니다.

var query = from a in entities.Activities 
       join p in entities.Phases on a.PhaseId equals p.Id 
       where p.Name == "Preplanning" 
       select a.Name 

은 모든 활동 이름의 IEnumerable<string>을 반환합니다.

2

그냥 선택 활동은, 당신이 원하는대로 :

쿼리 식은 절에서 로 시작해야하고을 선택하고 로 끝나야합니다 :

여기
var query = from a in entities.Activities 
      join p in entities.Phases on a.PhaseId equals p.Id 
      where p.Name == "Preplanning" 
      select a; 

는 다음과 같다 방법 query expression입니다 또는 그룹 절. 첫 번째 from 절과 마지막 select 또는 group 절 사이에는 where, orderby, join, let 및 심지어 from 절이 포함 된 하나 이상의 선택적 절이 포함될 수 있습니다. 또한 into 키워드를 사용하여 조인 또는 그룹 절의 결과를 동일한 쿼리 식의 추가 쿼리 절의 원본으로 사용할 수 있습니다. 수수께끼 이미지와 동일

:

var query = entities.Phases 
       .Where(p => p.Name == "Preplanning") 
       .Join(entities.Activities, p => p.Id, a => a.PhaseId, (p,a) => a); 
1

만 필요한 경우에 가입 할 필요가 없습니다 :

enter image description here

메서드 구문을 사용하면 특별한 뭔가 쿼리를 종료 할 필요가 없습니다 테이블 중 하나의 데이터. 대신 필터를 적용 할 수 있습니다.

var q = entities.Activities.Where(a => 
     entities.Phases.Any(p => a.PhaseId == p.Id && p.Name == "Preplanning"));