2017-10-14 7 views
0

에서 LINQ에서 자신의 이름으로 프로젝트 열이 나는 로 propertyNames속성 유형을 포함하는 Dictionary<string, string> Fields 있습니다.된 IQueryable : 동적 런타임

나는 질의 객체가 동적으로 필드 사전에 따라 내가 유형을 구축하는 TypeBuilder를 사용하고 IQueryable<T> query = GetQuery();

을 :

TypeBuilder builder = CreateTypeBuilder("MyDynamicAssembly", "MyModule", "MyType"); 

DataTable dt = new DataTable(); 

foreach (var s in Fields) 
{ 
    CreateAutoImplementedProperty(builder, s.Key, Type.GetType(s.Value)); 
    dt.Columns.Add(s.Key, Type.GetType(s.Value)); 
} 

Type resultType = builder.CreateType(); 

난 단지 프로젝트 linq을 사용하여 쿼리 개체를 수정할 그들의 이름이 Fields 사전에있는 열. 같은 뭔가 :

string[] columnsNames = Fields.Select(x => x.Key).ToArray(); 

나는이 어떻게 할 수있는

:

dynamic queryResult = query.Take(10).Select("Don't know how to project here???"); 

은 열 이름은 고려?

+0

윌의 확장 방법 샘플 데이터를 출력하고 출력하면 이해하기 쉬움 –

+0

런타임에 쿼리를 동적으로 작성하기 때문에 표현식 트리를 동적으로 빌드해야합니다. 이 라이브러리를 사용하여 다음 작업을 수행 할 수 있습니다. https://dynamiclinq.codeplex.com/documentation –

+0

@Gilad Green 더 많은 정보를 추가했습니다. – Karamafrooz

답변

1

런타임에 쿼리를 동적으로 작성하기 때문에 표현 트리을 동적으로 빌드해야합니다. 이 같은 동적 https://dynamiclinq.codeplex.com/ 귀하의 경우에는

, 당신이 당신의 .Select 절을 구축 할 수 있습니다 : 당신은 도움이 라이브러리를 사용할 수 있습니다

위의 .Select
string[] columnsNames = Fields.Select(x => x.Key).ToArray(); 

string columns = string.Join(",", columnsNames); 

dynamic queryResult = query.Take(10).Select("new (" + columns + ")"); 

가 해당 라이브러리

+1

고마워요. 좋은 +1 작품 – Karamafrooz