2014-06-09 3 views
2

EntityName 및 EntityIds가 포함 된 감사 모델이 있습니다. 나는이 테이블에서 EntityRecord 및 관련 기관을 검색합니다 동적 쿼리를 만들 수있는 방법을 찾고 있어요linq을 사용하는 동적 쿼리

이 지금까지

var auditRows = from a in context.Audit 
       where (a.EntityName == entityName && a.EntityKey == entityKey); 

내가 얻고 싶었다 어떤 경우입니다 무슨이다 엔티티, 말하자면 "클래스"는 관련 엔티티 "학생"을 가지고 있습니다. 나는 관련 기관

var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
var container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace); 
var relatedEntitySets = container.EntitySets.Where(es => es.ElementType.Name == entitySet).First().ElementType.NavigationProperties 

을 얻을 수있는 방법을 발견

where (a.EntityName == entityName && a.EntityKey == entityKey) || 
     (a.EntityName == "Students" && context.Students.Where(s => s.ClassID == entityKey) 

로 where 절을 생성하는 동적 쿼리를 craete 싶어하지만 난 쿼리를 만들거나 경우에이 방법을 모르는 쿼리를 만드는 더 좋은 방법입니다.

+0

실제로 수행해야하는 작업은 결합 작업을 수행하는 것입니다. –

+1

@Milo, 원하는 결과가 –

+0

즉 ID = 1, Name = "Class1"및 Student 레코드 ID = Name = "Student1", ClassID = 1 감사 테이블을 쿼리하여 (EntityName = "Class"&& EntityID = 1) 데이터를 검색하려고합니다. (EntityName = "Student"&& EntityID (학생 ID SELECT ClassID = 1)에서.) –

답변

0

내가 방금 어떤으로 WHERE 제거하고 교체하는 데 필요한 생각 :

var students = context.GetTable<Students>(); 
// Repeat for other tables 

where (a.EntityName == entityName && a.EntityKey == entityKey) || 
     (a.EntityName == "Students" && students.Any(s => s.ClassID == entityKey) || 
     (a.EntityName == "People" && people.Any(s => s.ClassID == entityKey) || 
     (a.EntityName == "FOO" && foo.Any(s => s.Bar == entityKey) 

없음() 당신이 원하는 WHERE가 존재 생성합니다.

+0

네, 맞습니다.하지만 내가 만들고자하는 것은 관련 엔티티에 대한 동적 쿼리입니다. 예 :이 줄 ("Students", "People", "FOO"). 나는 현재 무엇을하고 있으며, 메신저 만하고있다. 보다 역동적 인 방법을 찾는 것. –

+0

그래서 엔티티 이름과 상관 데이터 속성을 기반으로 "Students"엔티티를 찾고 싶습니까? 이 부분은 가능하며 속성을 가져 오기 위해 리플렉션을 사용할 수 있습니다. 그러나 이런 식으로 엔터티 쿼리에 linq를 구성 할 방법이 없습니다. 모두 지정해야합니다. 엔티티 이름을 엔티티 이름의 switch 문에 넣고 성능 향상에 도움이되는 단 하나의 OR 부분 만 가질 수 있습니다. case "Students": auditRows = auditRows.Where (a => (a.EntityName == entityName && a .EntityKey == entityKey) || (students.Any (s => s.ClassID == entityKey))); – Paul