2013-04-09 6 views
1

나는 코드가 더 잘될 수 있다는 것을 알고 있으며, 어떻게해야할지 모르겠습니다. 나는 이것을 도울 수있는 몇 가지 방법이 있다고 생각하지만, 이것이 원소 프로그래밍이라면 나를 용서해 주시기 바랍니다.C# 2012 목록 개체 제한

개체 목록을 채우기 위해 DataReader를 반복하고 있지만 목록의 인덱스 수를 제한하려고합니다. 나의 현재 코드는 다음과 같습니다

while (dr.Read()) 
{ 
    temp.Add(new Object() 
     { 
      PropertyA = dr.GetString(0), 
      ... 
      ... 
     }); 
} 

if (temp.Count > 100) 
{ 
    for (int i = 0; i <= 100; i++) 
    { 
     retObject.Add(new Object() 
      { 
       PropertyA = temp[i].PropertyA, 
       ... 
       ... 
      }); 
    } 

    return retObject; 
} 
else 
{ 
    return temp; 
} 

이 본질적으로 여기에 초보자 프로그래머처럼 너무 많은 소리없이, 데이터 집합에 두 번 루프 ... 그래서 100에 결과 집합을 제한하는 가장 좋은 방법 일 것입니다 무슨 쿼리 자체에서 TOP (###)을 사용하지 않고? (우리는 Stored Procs를 사용하여 질의를 변경하는 것이 의문의 여지가 없습니다.)

감사합니다. 나는 당신의 대답을 고대합니다. 첫 번째 루프에서

+0

당신이'dr.Read()'루프에서 카운터를 사용하여 문제가 있습니까? – Justin

+0

probabaly 그냥'반환 temp.GetRange (0,100)' – IdeaHat

+0

BTW - 현재 코드는 101 항목을 반환합니다 - 그게 원하는가요? –

답변

3

, 단지 카운터를 유지 :

int found = 0; 
while (dr.Read() && found < 100) 
{ 
    ++found; 
    retObject.Add(new Object() // No need for "temp" anymore 
    { 
     PropertyA = dr.GetString(0), 
     ... 
     ... 
    }); 
} 

return retObject;