2012-02-24 3 views
0

런타임 중에 sqldatareader의 필드 이름을 동적 객체에 동적으로 할당하려면 어떻게합니까? 나는 말할 수 없다런타임 중에 동적 객체의 속성으로 리터럴 문자열을 할당하고 액세스하십시오.

string sqlDataReaderFieldNameStringVariable = reader.GetName(index); 

:

dynamic dyn = new ExpandoObject(); 
dyn.sqlDataReaderFieldNameStringVariable = "test"; 

내가 어떻게 할 수 있습니다

내가 변수로 SqlDataReader 개체의 필드 이름을 읽고 가정 수 있습니다?

UPDATE : 점 ;-) 나는 메서드의 반환 값 유형 ExpandoObject의 목록에 내 DYN 개체를 추가를 얻을 수

여전히

시간. 데이터를 통해 목록에 액세스하면 [0] .test 속성은 컴파일 시간 동안 존재하지 않습니다 ???

나는 목록을 반환하는 방법이 외부에서 수행 할 때

dynamic bla = (ExpandoObject)data[0]; 
      String shit = bla.Name; 

왜 내가 캐스팅해야합니까를? 해결 방법은 없습니까? 고마워. 존.

+1

단지'목록 을 반환'대신 – BrokenGlass

+0

이 위대하다! 당신이 전에 11 분 이었기 때문에 또 다른 포인트는 당신에게 간다 : P – Pascal

+0

그것은 "투표"라고 불린다. - 그러나 당신은 단지 27 개의 질문 모두에서 2 개의 대답을 upvoted했기 때문에 나는 숨을 멈추지 않을 것이다 ;-) – BrokenGlass

답변

2

당신은 그렇게하는 ExpandoObjectdynIDictionary<string, object>에 먼저 캐스팅이 있습니다

dynamic dyn = new ExpandoObject(); 
var dynDict = dyn as IDictionary<string, object>; 
dynDict[sqlDataReaderFieldNameStringVariable] = "test"; 
+0

아, 전혀 : P – Pascal

+0

string val = dyn.test; 젠장. 역 동성 : P @BrokenGlass 내 브라우저를 새로 고침했을 때 Jon 전에 처음이었습니다 ;-) – Pascal

1

가장 동적 객체의 경우, 그것은 까다로운. Doable (IDynamicMetaObjectProvider 사용)이지만 까다 롭습니다. 당신이 을 경우 그 IDictionary<string, object> 구현 때문에 정말 ExpandoObject를 사용, 그것은 간단합니다

dynamic dyn = new ExpandoObject(); 
var dictionaryView = (IDictionary<string, object>) dyn; 
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test"; 
+0

아직 포인트를 얻는 데 시간이 많이 걸렸습니다 :-) 메소드의 반환 값인 ExpandoObject 유형 목록에 내 dyn 객체를 추가합니다. 데이터를 통해 목록에 액세스하면 [0] .test 속성은 컴파일 시간 동안 존재하지 않습니다 ??? – Pascal

+0

@ 파스칼 : 귀하의 의견을 분석하는 것이 어렵다는 것을 알고 있습니다. 그러나 질문에 대한 편집으로 작성할 수 있다면, 내가 할 수있는 것을 보게 될 것입니다 ... –

+0

done! 123을 갈거야. – Pascal

관련 문제