2014-06-14 3 views
0

그래서 인터넷에서는 쿼리를 실제로 가져와야하는 개체 (예 : 튜플) 묶음을 반환하는 Linq to Entities 쿼리를 만들기 위해 클라이언트 및 서버 단계 (Linq to Entities 및 Linq to Objects)로 나눌 수 있습니다. 더 많은 코드를 유지 보수하는 것에 관한 것. 예를 들어, Linq to Entities 매개 변수가없는 생성자 요구 사항은 게으른 쿼리에 대한 잠재 성을 파생합니다

(
     from table 
     select Tuple.Create(a, b) 
    ); 

불법이며, 실제로 곧 우리가 위대한 잠재력을 죽이고, ToList()는 쿼리가 열거 완벽하게 실행하고 부르는, 그러나

(
     from table 
     select new {A=a, B=b} 
    ).ToList().Select(row => Tuple.Create(row.A, row.B)); 

로 작성해야합니다 게으른 로딩. 나는 당신이 settable 속성들을 가진 클래스들로이를 우회 할 수 있다는 것을 알았지 만, 중복되어서는 안되는 시스템 클래스들, 또는 생성자에서 복잡한 로직을 가진 커스텀 클래스는 어떨까? 어떤 간단한이 제한을 피할 수있는 방법, 그래서 개체의 생성은 IQueryable 컬렉션이 열거되었을 때 수행하기 위해 대기열 수 있습니다?

내가하려고하는 것이 "열악한"디자인이라는 것을 알려주지 만, 적어도 이것이 가능한지 알고 있으면 좋을 것입니다. 미리 감사드립니다!

답변

0

터플은이 아니므로 설정할 수있는 생성자 나 입력란이 없으므로 입니다.

from table 
select new MyTuple() { A = a, B = b }; 

내가 그것을 알지 못했지만, 엔티티는 그냥 함수 호출을 인식하지 못하는 것 같습니다 :

당신이 당신의 자신의 개체를 만드는 경우 예상대로, 당신은 필드 이니셜 라이저를 사용할 수 있습니다 창조 방법.

+0

첫 번째 예제와 같은 쿼리를 작성할 때 다음 런타임 예외가 발생합니다. "매개 변수없는 생성자 및 이니셜 라이저 만 LINQ에 지원됩니다." – ztforster

+0

불량합니다. 나는 예제 1이 유효하다고 생각했다. 좋아,하지만 나는 예제 2를 알고있다. –

+0

호기심에서 벗어나서 어떤 버전의 엔티티를 사용하고 있습니까? –