2013-04-09 41 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(###)? (我们使用存储过程,所以改变查询是不可能的)。

谢谢乡亲!我期待你的回答。

+0

你有在'dr.Read()'循环使用计数器的任何问题? – Justin 2013-04-09 17:43:09

+0

probabaly只是'返回temp.GetRange(0,100)' – IdeaHat 2013-04-09 17:43:15

+0

顺便说一句 - 你目前的代码将返回101项 - 是,期望? – 2013-04-09 17:43:55

回答

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;