Первое может быть эквивалентно:
double total = 0;
int i = 0;
while(true)
{
int max = /*Database call to obtain COUNT(*) of join*/
if(max > i)
break;
int j = 0;
foreach(double value in result)
{
if(j++ == i)
{
total += value;
break;
}
}
++i
}
Или это может быть даже эквивалентно:
double total = 0;
int i = 0;
while(true)
{
int max = 0;
foreach(double value in result)
++max;
if(max > i)
break;
int j = 0;
foreach(double value in result)
{
if(j++ == i)
{
total += value;
break;
}
}
++i
}
Или может потребоваться получить result
каждый раз, когда он появляется в приведенном выше коде.
С другой стороны, Count()
может быть получено одним доступом к свойству, а ElementAt()
может быть O (1), если они поддерживаются структурами, которые допускают такую оптимизацию, и такая оптимизация действительно была доступна (например, для List<T>
).