2013-06-27 2 views
1

하나의 DataTable을 포함하는 데이터 집합이 있고 그 테이블에는 Column1, Data2, Column2의 3 열 & 개의 데이터 행이 있습니다.DataColumn에서 값을 찾고 바꾸는 효율적인 방법

또한 DataColumn 내에서 검색해야하는 값 목록과 원래 값을 바꿔야하는 값이 포함 된 사전이 있습니다.

이름이 '데이터'인 열과 함께 검색하고 싶습니다.

다음 이미지에는 검색 및 대체해야하는 키와 값이 포함 된 사전과 함께 원본 데이터 테이블과 결과 DataTable이 포함되어 있습니다.

DataTable

이 작업을 수행 할 수있는 가장 효율적인 방법은 무엇입니까? 편의를 위해

+0

T-SQL 내에서 나는 생각했을 것입니까? – BIDeveloper

+0

지금까지 시험해 본 것은 무엇입니까? –

+0

MDX 쿼리를 실행하고 데이터를 다시 가져 오는 중입니다. 그래서 C#을 사용하여 데이터를 수정해야합니다. 열 이름이 "데이터"인지 확인한 다음 행을 반복하여 값을 찾아 바꿀 수 있습니다. 나는 그 와트에 가고 싶지 않다. – SharpCoder

답변

0

이동

foreach (DataRow row in dataSet.Tables[0].AsEnumerable()) 
{ 
    string data = row.Field<string>("Data"); 

    string newData = null; 
    if (dict.TryGetValue(data, out newData)) 
    { 
    row.SetField("Data", newData); 
    } 
} 

0

내가 이런 식으로 처리 할 것 (프로젝트 참조에 System.Data.DataSetExtensions을 추가해야합니다) :

DataSet ds = new DataSet(); 
string strNewXmls = ds.GetXml().Replace("AAA", "A++"); 
System.IO.StringReader srXmlStringReader = new System.IO.StringReader(strNewXmls); 
ds.ReadXml(srXmlStringReader, XmlReadMode.IgnoreSchema); 

이 빠른이며, 간단한 해결책. 전체 DataSet의 모든 종류의 항목으로이 작업을 수행 할 수 있습니다.

는 희망이 도움이

,

Taragneti

가 LINQ를 사용하여이 작업을 수행하는 가장 좋은 방법이지만,이

Dictionary<string,string> dic = new Dictionary<string,string>(); 
dic.Add("AAA", "A++"); 
dic.Add("BBB", "B++"); 
foreach(KeyValuePair<string, string> kvp in dic) 
{ 
    DataRow[] sl = dt.Select("DATA='" + kvp.Key + "'"); 
    foreach(DataRow r in sl) 
     r["DATA"] = kvp.Value; 
} 

내부 foreach 루프에 의해 대체 될 수 다할 것을

1

나는 확신 표현

sl.ToList().ForEach(x => x.SetField<string>("DATA", kvp.Value)); 

그러나 성능을 테스트하지 않았습니다.

대용량 데이터 세트에서는 그리 효율적이지는 않지만 테이블의 단일 행이 아닌 사전 키를 루프하는 것이 고려해야합니다.

관련 문제