2011-11-04 2 views
0

항상 함께로드해야하는 테이블이 두 개 있습니다. 둘 다 데이터베이스에 함께 있어야합니다. 그러나 나는 LINQ to SQL은 내가 할 다음, 나는 단지 을 paramid 기록은 = 5, 예를 들어 말을이 하나 개의 테이블을 ... 가입하려는 참여를 모음에로드 할 것을 요구하는 이유 궁금Linq to Sql : Join, 왜 컬렉션을로드해야합니까?

var data = _repo.All<TheData>(); //why do I need a collection/IQueryable like this? 

var _workflow = _repo.All<WorkFlow>() 
       .Where(x => x.WFID== paramid) 
       .Join(data, x => x.ID, y => y.WFID, (x, y) => new 
       { 
        data = x, 
        workflow = y 
       }); 

그럼 내가해야 할 일은 SingleOrDefault()일까요? 레코드가 null이 아니면 다시 전달하십시오.

나는 SQL 쿼리가 올바르게 나오는 것을 이해합니다. 이것을 작성하는 더 좋은 방법이 있습니까?

참고 : 내가 볼 Participants라는 테이블을 검색해야하는 경우 loggedonuser 수 실제로 보기이 기록, 그래서 나는이로 남겨 두어야 추측?

var participant = _repo.All<Participants>(); 

.Any(x=> x.ParticipantID == loggedonuser.ID); //add this to above query... 

답변

1

라인 var data = _repo.All<TheData>(); '는 TheData 테이블에 대해 쿼리를 작성 시작'말 같은 것입니다 (이 주요 요구 사항입니다). 이 함수는 데이터베이스에 대한 쿼리 정의를 포함하는 IQueryable을 반환합니다.

그렇다고해서이 라인으로 전체 TheData 테이블 데이터를로드한다는 것을 의미하지는 않습니다!

.Count(), .Any(), First(), Single() 또는 ToList()와 같은 작업을 수행 할 때 쿼리가 실행됩니다. 이를 지연 실행이라고합니다.

SingleOrDefault()를 사용하여 쿼리를 끝내면 두 테이블을 조인하고 맨 위에있는 레코드 또는 null을 선택하거나 더 많은 레코드가있는 경우 오류를 던지십시오.

또한 검색어 확장 메소드 대신 Linq를 사용할 수도 있습니다. 다음과 같이 표시됩니다 :