2012-11-23 2 views
1

런타임에 LINQ to Entities 쿼리의 DbSet을 지정할 수 있습니까?LINQ to Entities 동적 DbSet

예를 들어 "IsExpired"와 같은 공통 속성이있는 여러 DbSets가있는 경우 쿼리에 DbSet을 전달할 수 있습니까?

Dim query = db("myDynamicName").Where(Function(o) o.IsExpired) 

기능은 다음과 같습니다 유창한 구문을 사용하는 경우

Dim query = From o In db.Products Where o.IsExpired = True 

가 같을까요

그래서, 이것이 가능하지 않은 이유

Dim myDynamicName As String 
myDynamicName = "Products" 

Dim query = From o In db("myDynamicName") Where o.IsExpired = True 

답변

1

이유는 더 분명해진다 a

Function Func(Of In T, Out bool) 

이고 T의 유형은 그 앞에 오는 IQueryable Of T에서 유추됩니다. (Where은 확장 메서드이므로 IQueryable은 첫 번째 입력 매개 변수이기 때문에 가능합니다.) 따라서 컴파일러는 o.IsExpired이 유효한 표현임을 알고 있습니다.

즉, db("myDynamicName")은 구체적으로 입력해야하며, 그렇지 않으면 Where 메서드에 입력해야합니다. 그러나 그것은 당신이 우회하려고하는 것과 정확히 같습니다.

+0

좋은 설명, 고마워! – Newm