2011-01-25 4 views
14

DataRow에서 생성되는 Dictionary<string,object>이 필요합니다. 현재이 작업을 위해 뭔가가 있지만 너무 많이하고 있고 .ToDictionary() 확장 메서드를 사용하지 않습니다.DataRow의 .ToDictionary() 확장 메서드 사용 방법

누군가가 이것을 성공적으로 수행하는 방법을 알려주십시오.

여기 내 실패 시도 :

var dataDictionary = dataTable.Select(acn + "=" + accountNumber).ToDictionary(key => key.Table.Columns); 

이는 KeyValuePair<DataColumnCollection, DataRow>을 반환하지만 다시, 나는 사전에 다시 Dictionary<string,object>

감사를 필요로한다! 반환 된 사전의 값에 변환을 실행하려면

.ToDictionary(row => (string)row["acn"]); 

ToDictionary 두 번째 대리자를 취합니다

+1

당신은 키와 값으로 원하는 것을 언급하는 것을 잊었다? 귀하의 질문은 그것 없이는 의미가 없습니다. 일반 용어를 사용하여 답변을 게시하겠습니다. – driis

+0

답변 해 주셔서 감사합니다. 제가 그 일을 할 수 있다고 생각합니다. 내 키는 열 이름이어야하고 내 값은 데이터 열의 해당 열 값이어야합니다. – BueKoW

+0

흠 - 여러 행을 선택 하시겠습니까? 아니면 '선택'만 하나의 행과 일치해야합니까? – driis

답변

8

당신은 테이블에 acn 열 수 있습니다 당신이 원하는 키를에서 지정할 필요가있다.

편집

일반적인 경우를 설명하므로 원래 답변을 남겨 두겠습니다. 하나의 행을 가져 가고 싶습니다. 그런 다음 열을 키로 사용하고 열 값을 잘 값으로 사용하십시오. 이것이 당신이하는 방법입니다.

DataRow row = dataTable.Select(acn + "=" + accountNumber).Single(); // You might want SingleOrDefault 
var dataDictionary = row.Table.Columns.ToDictionary(col => col.Name, col => row[col.Name]); 

면책 조항은, 위의 손에서 컴파일러없이 작성되었음을 확인, 약간의 조정이 필요할 수 있습니다.

+0

위의 코드는 괜찮지 만 "컴파일러없이 작성되었습니다". 대신 @ jjoelson의 대답을 사용하십시오. –

25

나는이 오래 알고 있지만, 함께 온 것과 나중에 올바른 LINQ 식 driis의 코드를 약간 수정입니다 :

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<string>(col.ColumnName)); 
-1

내가 jjoelson의 대답 @ LINQ

dataTable.Rows.Cast<DataRow>().Select(e=>e.Table.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => e[col.ColumnName])).ToList() 
2

Dictionary<string, string>을 생성합니다. 당신이 Dictionary<string, object>을 원하는 경우에, 당신은 물론, 할 수있는 :

var dictionary = row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row.Field<object>(col.ColumnName)); 

하지만 약간 덜 복잡한 버전은 다음과 같습니다

var dictionary row.Table.Columns 
    .Cast<DataColumn>() 
    .ToDictionary(col => col.ColumnName, col => row[col]);