2009-10-14 2 views
0

EntitySet 쿼리

과 비슷한 쿼리를 실행하려고합니다.
var results = MyItem.MyEntitySet.Where(x => x.PropertyB == 0) 

MyEntitySet에는 MyItem을 사용하는 PropertyA라는 하나의 연관이 있습니다.

이상적으로, 기본 SQL 쿼리는

SELECT .. FROM .. WHERE ([t0].[PropertyA] = @p0) AND ([t0].[PropertyB ] = @p1) 

이어야합니다. 왜냐하면 PropertyA와 PropertyB는 내가 쿼리하는 테이블의 두 기본 키이기 때문입니다.

그러나 내 흔적은 PropertyA가있는 프로그램이 먼저 MyEntitySet을 반환하고 PropertyB를 사용하여 var results을 반환하도록 쿼리하는 것으로 나타납니다.

어쨌든 Linq가 단일 SQL 문에서이 두 조건을 사용하여 쿼리 할 수 ​​있습니까?

답변

0

아마도 그렇지 않을 수도 있습니다. 생성 된 SQL은 LINQ 쿼리를 작성하는 방식과 일치하므로 생성 된 SQL은 놀라운 것이 아닙니다. "MyEntitySet"이 나타내는 엔티티로 시작한 경우 생성 된 SQL이 변경됩니다.

LINQ to SQL 또는 Entity Framework를 사용하고 있는지 여부가 즉시 명확하지 않습니다. LINQ to SQL은 일대 다 관계를 "엔터티 집합"으로 나타내지 만 Entity Framework는 관계를 일급 개체로 처리하므로 일대 다 관계는 관련 엔터티와의 관계 개체 집합이 아닌 일대 다 관계가됩니다. 단순히 엔티티 집합. 생성 된 SQL에 영향을줍니다.

다른 두 가지 생각 ... 당신은 생성 된 SQL을 통해 많은 제어, 당신은 아마 LINQ와 행복하지 않을 것이라는 점을하려면

. 항상 최적의 SQL을 생성하는 것은 아닙니다 (때때로 당신을 놀라게 할 수도 있음). 반면에 LINQ의 주요 이점 중 하나는 데이터의 실제 관계를 나타내는 코드를 작성하는 것입니다. 고전적인 ADO.NET의 몰락은 SQL 조작과 DataSet 및 DataTable 컬렉션 처리에 대한 코드를 작성한다는 것입니다. LINQ는 무한히 깨끗하고, 안전하고, 강력하며, 유지 관리가 쉬운 코드입니다. 모든 것은 절충안입니다.

두 번째로 쿼리 생성은 시간이 지남에 따라 더 좋아질 가능성이 있습니다 (특히 Entity Framework에서).