비슷한 방식으로 쿼리해야하는 매우 유사한 스키마가있는 DB에 2 개의 테이블이 있습니다. linq 엔티티에 대한 부분 클래스를 작성한 다음 클래스가 인터페이스를 구현하도록 만들었습니다. IEvent는 필 요한 서명과 일치하는 모든 특성을 정의합니다. 모든 것이 좋으며, 결과를 IQueryable에 캐스트하고 동일한 코드를 사용하여 둘 이상의 소스에서 가져온 데이터를 처리 할 수 있습니다. 내가 알 수없는 것은 "DataSource"(즉, 이벤트 테이블)가 현재 활성화되어 있으므로 테이블을 가져 오는 좋은 방법이다. 그래서 현재 다른 데이터 소스가 추가되면 업데이트해야하는 불쾌한 switch 문이있다. 1 비트 좋아해. 사람은 늦은 여기에, 모든 스마트 아이디어를 가지고와 내 머리는 ... 실패 : -S동적 Linq.Table <TEntity> 가능합니까?
는코드는 다음과 같이 진행됩니다
private IQueryable<IEvent> getEvents(IEnumerable<int> IDs)
{
var db = new EventDataContext();
// activeDataSource is an enum defined elsewhere
switch (activeDataSource)
{
case DataSource.Source1:
return db.Events1.Where(e => IDs.Contains(e.ID)).Cast<IEvent>();
break;
case DataSource.Source2:
return db.Events2.Where(e => IDs.Contains(e.ID)).Cast<IEvent>();
break;
}
}
안녕하세요, 이것은 내가 찾던 그냥 뭐처럼 보였다하지만 난 그것을 구현하는 tryed 때 나는 "T는 매개 변수 'TEntity'로 사용하기 위해 참조 형식이어야합니다"VS에서 다음과 같은 오류가 발생했습니다 . Event1과 같은 클래스에 제약이 가해 지지만 그 종류의 목적을 상실합니다. : – withakay
T에 클래스 제약 조건을 추가했습니다. 즉, T는 IEvent를 구현하는 모든 클래스가 될 수 있습니다. – jrummell
안녕하세요, 답변을 주셔서 감사합니다.이 모든 것을 알아야하고 엄밀히 말하면 내 질문에 답변했습니다. 그래서 나는 당신에게 크레딧을 줄 예정이다. 나는 T가 무엇이되어야 하는지를 결정하는 문제로 여전히 남아있다. 나는 설정 파일에서 DataSource를 가져오고 싶다. 나는 그것을 피하고 있었지만, – withakay