2009-09-24 7 views
2

공분산에 대해 알고 있습니다. 일반적으로 C#에서 v4.0까지는 가능하지 않습니다.IQueryable <Derived>을 IQueryable <Base>으로 변환 할 수 있습니까?

그러나 특정 사례에 대해 궁금합니다. IQueryable<Derived>IQueryable<Base>으로 변환하는 방법은 실제로 쿼리를 수행하지 않지만 실제로 "통과"할 수있는 래퍼 클래스를 만드는 것입니까? .Where<>() 호출?

내 유스 케이스는 많은 유사한 테이블을 가진 데이터베이스 스키마를 다루려고한다는 것입니다. 대부분의 필드는 공통이며, 많은 공통 필드는 각 테이블에서 쿼리해야합니다. 나는 LinqToSql을 사용하고있다. 나는 각 테이블에 대한 모든 쿼리를 중복하지 않기를 바랬다.

답변

5

다음 정보는 무엇입니까?

var results = queryable.OfType<Base>.Where(...); 

OfType 방법은 지정된 유형의 아무것도를 수집하며, 수집의 모든 항목 유형의 자료 중 하나, 또는 유형의 기지에서 파생 된 경우, 그들은 자격이 있어야합니다. 후속 부분에서 모든 항목은 기본 유형입니다. 덜 예쁜 입력해도

+0

와우. 지금은 바보 같아. 글쎄, 그건 내가 필요로했던 것과 똑같은 것처럼 보인다. 감사. – recursive

+0

문제 없습니다. :) 다행스럽게 도와 줬어. – jrista

0

다음은 또한, 작동합니다

var results = queryable.Select(derived => (Base)derived).Where(...); 
+0

파생 클래스가 실제로 Base 유형이 아닌 경우 실패합니다. 컬렉션에 공통 기반에서 파생되지 않는 다양한 개체가 포함되어있는 경우 OfType 은 캐스팅에 실패한 개체를 건너 뛰고 계속 진행합니다. – jrista

관련 문제