sql에 두 테이블 (Address
및 Phone
)이 일대일 관계로 있다고 가정합니다. 나는 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
과 같은 해결책은 아닙니다. 기본 키가 아니어야합니다.
두 번째 쿼리를 첫 번째 쿼리와 동일한 방식으로 작동시킬 수 있다면 관심이 있습니다. 나는 이해할 수 없으므로. 나 맞아? – Giorgi
수정. Linq가 SQL에서 수행하는 작업은 질의와 같은 종류의 "표현식 트리"를 만드는 것입니다 (각 주소에 대해 전화 속성을 확인한 다음 100과 같으면 반환). 그런 다음 SQL 쿼리로 변환합니다. 논리적으로 SQL로 변환 할 수 없기 때.에 u 오브젝트를 u 리에 공급하는 것은 의미가 없습니다. 그러나 모든 주소를 가져온 다음 쿼리에 대해 수행 할 수는 있지만 성능에 영향을 미칩니다. – Spence
답변 해 주셔서 감사합니다. – Giorgi