2012-02-07 3 views
0

아래의 LINQ 표현식을 사용하여 데이터 테이블을 채우려 고합니다. 문제없이 작동하지만 해킹이 느껴집니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? LINQ 표현식을 실행 중입니다.

var Records = <Dictionary object with some data.> 

DataTable objDataTable = null; 
objDataTable.Columns.Add("Column1", typeof (string)); 
objDataTable.Columns.Add("Column2", typeof (string)); 

// Have to perform .Count() to execute the linq expression in order to 
// add datarows in datatable 

Records.Keys.Select(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]})).Count(); 

나는 문을 실행하기 위해 마지막에 .Count()에에있는 이상 당신이 볼 수 있듯이

. 이전에 나는 .ToArray()을하고 있었지만 그때 나는 .Count()이 더 저렴할 것이라고 생각했다.

어느 쪽이든이 방법은 읽기가 쉽지 않습니다. 당신이 사용 Linq는 당신이 항상 것은 그렇게하도록 강요해야 의미하지 않는다 수해서

foreach(var rec in Records.Keys) 
{ 
    objDataTable.Rows.Add(new object[] {rec, Records[rec]}); 
} 

을 - 특히 -

+0

[가능한 LINQ-Query를 실행하는 가장 저렴한 방법은 무엇입니까] (http://stackoverflow.com/questions/9010639/what-is-the-cheapest-way-to-execute-a-linq - 쿼리 - 즉시) - 유사점이 인상적입니다 ... –

+0

:) 예 그들은 있습니다 – Zeus

답변

3

예 그냥이 완벽하게 읽을 수와 적합하는 foreach 루프를 사용 부작용이있는 코드가있는 경우 여기

foreach(var kvp in Records) 
{ 
    objDataTable.Rows.Add(new object[] {kvp.Key, kvp.Value}); 
} 

kvp :

+0

이것은 내 기본 구현되었습니다 ... 그냥 쓸모가있을 수있는 다른 것이 있는지 알아 내려고했습니다 – Zeus

1

사용하십시오 ForEach 대신 : 당신은 항상 당신이 반복 각 키의 값을 보면, 난 그냥 사전 자체를 열거

Records.Keys.ForEach(rec => objDataTable.Rows.Add(new object[] {rec, Records[rec]})); 
+0

그 사전 ... ForEach는 다음과 같이 수행 할 수 없습니다. – Zeus

0

가보고 말 것 KeyValuePair<string, string>입니다. 내 눈을 감안하면, 의 항목이 모두 인 사전에서 무언가를하고 싶다는 것을 분명하게 알 수 있습니다.

관련 문제