2010-02-11 4 views
1

sql에 두 테이블 (AddressPhone)이 일대일 관계로 있다고 가정합니다. 나는 SQL 클래스에 상응하는 linq를 만들고 연관을 OneToOne으로 변경했다.Linq의 일대일 연관 및 필터링

자식 개체를 필터링하여 두 개체를 모두 가져 오려고한다. 예컨대 내가 잘 작동 다음 쿼리를 가지고 :

var n = db.Addresses.Where(t => t.Phone == new Phone(100)); 

Phone 클래스 생성자 위의 Number 속성을 초기화합니다

var n = db.Addresses.Where(t => t.Phone.Number == 100); 

나는 다음과 같은 일을 할 수있는 방법이 있습니까. 내가 볼 수 있듯이 발급되는 쿼리에는 전화 번호 (기본 키)로 전화 테이블을 필터링하지만 절에 포함되지 않은 절이 포함되어 있습니다.

비주얼 스튜디오에서 Number을 기본 키로 설정하면 where 절에 포함되지만 id의 매개 변수 값이 0이기 때문에 검색 결과가 반환되지 않습니다. 효과가 있다고하더라도 Number과 같은 해결책은 아닙니다. 기본 키가 아니어야합니다.

답변

1

당신이 요구하는 것은별로 이해가되지 않습니다. 주소가 지정된 phone 요소를 원하면 Address.Phone 속성에 액세스하여이 항목을 가져야합니다.

형식을 초기화 할 수 없으며이 형식은 DLinq이기 때문에 프로젝트에 사용할 수 없습니다.이 형식은 쿼리가 DB로 변환됩니다. Linq 개체에이 작업을 수행 할 수 있지만 메모리에 모든 데이터베이스 정보를 가져올 수있는 목록을 열거 할 것이므로 성능에 좋지 않을 수 있습니다.

문제점이 표시되지 않습니다. 이리? 주소가 있고 그 주소를 검색 할 수 있으며 Address 속성에 액세스하여 전화 속성에 액세스 할 수 있습니다.

+0

두 번째 쿼리를 첫 번째 쿼리와 동일한 방식으로 작동시킬 수 있다면 관심이 있습니다. 나는 이해할 수 없으므로. 나 맞아? – Giorgi

+0

수정. Linq가 SQL에서 수행하는 작업은 질의와 같은 종류의 "표현식 트리"를 만드는 것입니다 (각 주소에 대해 전화 속성을 확인한 다음 100과 같으면 반환). 그런 다음 SQL 쿼리로 변환합니다. 논리적으로 SQL로 변환 할 수 없기 때.에 u 오브젝트를 u 리에 공급하는 것은 의미가 없습니다. 그러나 모든 주소를 가져온 다음 쿼리에 대해 수행 할 수는 있지만 성능에 영향을 미칩니다. – Spence

+0

답변 해 주셔서 감사합니다. – Giorgi