2013-10-30 2 views
3

Entity Framework에서 지원하는 프로젝트 인 Cars and Truck에 두 개의 Entity Sets가 있다고 가정 해 보겠습니다. 자동차 및 트럭 모두 구현 가능 IDriveable다른 오브젝트 세트에서 리턴 할 수있는 술어 또는 동적 Linq?

불러 오기 기능이로드되지 않은 특정 IDriveable을 반환하도록 술어 또는 동적 Linq를 사용할 수 있습니까? 우리가 이미 표/설정을 선택한 후

db.Cars.Where("ID==123"); 

은 "동적"부분은 온다 :

내가 Dlinq의 본 모든 예는 다음과 같이 있습니다. 우리는 이미에 대한 참조가 가정

static bool greaterThanTwo(int arg) 
{ 
    return arg > 2; 
} 

: 나는 술어에 관해서는

db.SomeMethod("Cars.Where(ID==123)"); 

같은 것을 필요 했어, 내가 본 예제는 지금까지 목록에 작용하는 기능과 같은입니다 원하는 세트. 동적으로 레코드의 고유 ID 필터를 레코드를로드 할 테이블을 동적으로 알려주려면 어떤 방법이 필요합니다.

답변

1

나는이 질문을 완전히 이해할 수 있을지 모르겠다.하지만 실제로 쿼리가 동적 일 필요는없는 것처럼 보인다.

var type = Assembly.GetCallingAssembly().GetTypes().Single(x => x.Name == "Car"); 
var method = db.GetType().GetMethod("Set", BindingFlags.Instance | BindingFlags.Public).MakeGenericMethod(type); 
var set = (DbSet) method.Invoke(db, new object[0]); 
var myDrivableThing = (IDrivable) set.Find(id); 

이 완전히 안된이며, 컴파일되지 않을 수 있으므로 에누리이 걸리지 만 그것은 당신에게를 얻어야한다 : 그런 경우, 당신은 ID로 필터링하는 경우,이 같은 뭔가가 작동하지 않을 수 있습니다 dbset을 사용하여 원하는 동적 유형을 찾은 다음 find 메소드를 사용하여 id로 항목을 가져옵니다. 아, 또한 예제에서 가지고있는 db가 DbContext이거나 상속되는 것으로 가정합니다. DbContext

+0

감사합니다. 좋은 시작점처럼 보입니다. 그리고 네, 그것은 DbContext입니다. –

+0

@NeilN 해결 방법을 알아 냈습니까? –