2011-10-25 4 views
0

동적 인 LINQ JOIN 쿼리를 수행해야합니다. 동적이라는 것은 내가 가입하려고하는 열의 수를 런타임 이전에 알 수 없다는 것을 의미합니다. 조인의 왼쪽/오른쪽에 어떤 릴레이션 (테이블)이 있는지조차 알지 못합니다. 마지막으로, 프로그램 실행 (INNER/OUTER) 전에 조인 유형을 알지 못합니다. 많은 유연성, 많은 문제.Silverlight 및 WPF의 LINQ에서 동적 JOIN

WPF에서는 string에서 LINQ까지의 문을 컴파일 할 수 있습니다. 실버 라이트 (Microsoft.CSharp 네임 스페이스 없음)의 경우 쉽지 않습니다.

이 문제를 해결하는 가장 쉬운 방법은 문자열을 LINQ로 컴파일하는 것입니다. WPF와 Silverlight 모두를위한 작업 솔루션을 원하기 때문에 확신 할 수 없습니다. 아이디어가 있습니까?

미리 알려 주셔서 감사합니다.

+0

LINQ에는 외부 조인이 없습니다. 관심 없으면 LINQ 문으로 문자열을 컴파일하는 방법은 무엇입니까? – svick

+0

@svick, how about : a에서 A 조인 b는 new {a.k}와 B가 B에서 new {k = b.c}가 C에서 x로 C.DefaultIfEmpty() select ...? 그런 식으로 나는 여전히 외부 조인을 얻을 수 있습니다. – Jamie

+0

@svick, 오픈 소스 컴파일러 (LINQ 컴파일러)가 있습니다. – Jamie

답변

0

좋아, 아마도 자신의 질문에 대답하는 것이 좋지 않을 수도 있지만, 양측의 객체를 포함하는 추가 클래스를 join으로 정의하여 다른 방법으로 내 문제를 해결했습니다. 그런 다음 비교는 Equals()GetHashCode() 메소드로 수행됩니다. 내 경우에는 매력처럼 작동합니다 :-)

어쨌든 답장을 보내 주셔서 감사합니다.

0

LINQ는 런타임보다 런타임 쿼리에 더 적합합니다. 건물 표현의 고통은 당신이 달성하려고 시도 할 수있는 기능을 능가 할 수 있습니다.

LINQ to Databases를 수행하는 경우 엔티티 쿼리를 문자열로 작성하고 런타임에 표현식 트리를 작성하는 대신 LINQ가 아닌 EF 및 EntitySql을 사용하는 것이 좋습니다.

+0

동적 LINQ는 어떻습니까? 이 기능을 구현하는 것이 가능하다고 생각하십니까? – Jamie

+0

이 시점에서 Dynamic LINQ 라이브러리를 많이 사용하지는 않았지만 컴파일 타임에 열을 모를 때 반환 형식 (T는 IEnumerable )을 지정하는 방법을 궁금해 할 것입니다. 난 당신이 IEnumerable 을 사용하는 것이라고 가정합니다. EntitySql을 사용하면'context.CreateQuery (entitySQL)'를 통해 문자열을 파싱하고 DbDataRecord를 사용할 수 있습니다. –

+0

왜 반환 유형을 모르는 것으로 가정합니까? select 문에 지정된 열을 갖는 FlattenedType이 될 것입니다. – Jamie