2009-11-13 2 views
0

다음과 같이 세 개의 테이블이 있다고 가정합니다.EF를 기반으로 linq 쿼리를 작성하는 방법?

Person(pid, ...) 
PersonAddress(pid, aid,...) 
Address(aid, ...) 

그런 다음 sql과 같은 사람 주소를 얻으려고합니다.

Entity Framework를 사용하여 Entity Model을 만든 다음 위의 SQL과 동일한 기능을 수행합니다. .

다음과 같은 방법으로 시도해 보았습니다.

 var addresses = this.GetAddress(); 
     var personaddresses = this.GetPersonAddress(); 

     var query = from ad in addresses 
        from pa in personaddresses 
        where ((ad.AddressID == pa.AddressID)&&(pa.PersonID==person.personID)) 
        select ad; 

오류가 발생했습니다. 아니면 시작하려고 :

var result = this.Context.Address; 
var result = result.Join .... //how to write linq in this way? 

어떻게 linq을 작성하려면?

답변

1

이 안된하지만 당신은 당신의 관계 설정을 모두 가지고 있고이에서 (나는이의 이름으로 모델을 사용했다) 모델을 만드는 경우 다음과 같은 사용할 수 있어야합니다 :

var values = this.Model.Address.Select(a => a.PersonAddress.Where(pa => pa.Id == myPersonID)); 
+0

감사 :

var values = context.Address.Where(a => a.PersonAddress.Where(pa => pa.Product.Id == myProductId).Count() > 0) 

는 결과에서 국가 테이블을 포함합니다. 시도 할 것이다. – KentZhou

+0

시도한 후에 오류가 없습니다. 하지만 결과 확인을 위해 디버깅 할 때 각 사람에 대한 레코드를 생성합니다. 그 아래에는 주소가 없습니다. 하나의 레코드 만 가져야합니다. 결과와 혼동되면 – KentZhou

+0

당신은이 주소가 아닌 사람들의 주소 목록을 가져야합니다. – bobwah

1

LINQ to Entities에서는 거의 join을 사용하지 않습니다.

시도 :

var q = from p in Context.People 
     where p.PersonId == personId 
     from a in p.Addresses // presumes p.Addresses is 1..* 
     select a; 
1

세 단체가 가정 :

var values = context.PersonAddress.Where(pa => pa.Person.PersonId == myPersonId).Select(pa => pa.Address); 
: 사람, PersonAddress 및 주소, 여기 당신의 필요 (이 예는 엔티티 프레임 워크 컨텍스트 명명 컨텍스트를 가정)을 충족해야하는 쿼리입니다

그러나 PersonAddress 테이블이 순수 다 대다 관계 테이블 (예 : 키만 포함)로 존재하는 경우 중간 테이블이 아닌 방식으로 Entity Framework 모델을 설정하는 것이 좋습니다 필요한, 그것은 당신을 훨씬 단순하게 만들 것입니다. 어 : 당신이 국가 테이블을 포함 할 필요가 있기 때문에 추가 의견을 바탕으로

var values = context.Person.Where(p => p.PersonId == myPersonId).Addresses; 

, 당신은 주소 테이블에서 쿼리를 기원합니다. 이 경우 :

var values = context.Address.Include("Country").Where(a => a.PersonAddress.Where(pa => pa.Product.Id == myProductId).Count() > 0) 
+0

var values ​​= context.PersonAddress.Where (pa => pa.Person.PersonId == myPersonId) .Select (pa => pa.Address); 이 작동하지만이 쿼리에 include를 추가하는 방법은 무엇입니까? 예를 들어 contry shoul에 대한 조회가이 검색어에 포함됩니다. – KentZhou

+0

위의 대체 구문보기 ... – mkedobbs

관련 문제