2009-10-27 2 views
1

나는 (그 표면에) 아주 간단합니다 Linq 아주 간단한 Linq 있어요. 생성 된 SQL 코드를 검사하면 모두을 방금 요청한 필드 대신 검색하려고합니다. 이게 보통의 관행인가? 지금이상한 Linq SQL 오류 - 너무 많은 필드를 검색

var result = (from q in db.Foos 
       where blah blah blah 
       orderby more blah 
       select new ResultThingy 
       { 
        A = q.A, // int 
        B = q.B, // string 
        C = q.Bar.A // int 
        D = q.Bar.B // string 
       }) 
       .Take(5) 
       .ToList(); 

이 테이블 바 (그리고 몇 가지 다른 필드)에서 모든 값을 불러 오는 것 -을 :

여기에 SQL 쿼리에 LINQ에 대한 몇 가지 psedo 코드입니다.

정상적인 관행입니까? ResultThingy 클래스의 각 속성이 단순한 형식 인 방법에 주목하십시오.

흠 ... 생각? 나는 이것에 대하여 정말로 혼란 스럽다.

답변

0

이것은 (코드를주의 깊게 살펴본 후) 정상입니다.

.NET 형식 (엔티티가 아님)을 사용할 때 Linq2SQL은 마지막 선택까지 모든 것을 추출해야합니다.

이 문제를 해결하려면 익명 개체를 대신 사용하십시오.

IOW : select new { q.A, q.B, C = q.Bar.A, D = q.Bar.B }

+0

? 흠. 끝내주는거야. ResultThingy가 _POCO_ 클래스이고 Linq2SQL 엔티티 테이블/클래스가 아님을 확인할 수 있습니다. 대신 익명의 객체를 사용하고 여기서 다시보고 할 때 어떤 일이 일어나는지 보겠습니다. –

+0

그것은 작동합니다 :) 귀하의 선택은 Enumerable 및 Queryable이 아닌 것으로 취급됩니다 (하지만 select까지 쿼리 가능). – leppie

+0

Nope - 여전히 코드를 변경하려고합니다. (코드가 ...로 바뀌 었습니다. 새로운 {...}을 (를) 선택 했으므로, 내가 선택한 항목을 모두 선택할 때까지 선택 항목의 모든 항목을 제거했습니다. 관심을 보지 못했지만 익명의 객체를 사용하는 대신 (제안 된대로) 익명의 객체를 사용하는 대신 내 POCO를 사용했습니다. 실제로는 효과가있었습니다. 그 엔티티에 대한 데이터가 반환 될 것입니다.) 흠. 이상하게 :) 나는 어쨌든 포인트를 줄 것이다. :) –