2016-02-16 2 views
2

Я вычисляю в большом datatable. Имя таблицы является храмовым.C# datatable computing

Я пытаюсь вычислить сумму из 4-го столбца в последний столбец и сохранить результаты в другой тип данных. Но я получаю ошибки, поскольку он говорит, что не смог найти столбец «colPnow»

Любые идеи?

DataView dv2 = new DataView(SP_dt); 

     for (int i = 0; i < LoadIDcount; i++) 
     { 
      string IDnow = LoadID[i, 0]; 
      dv2.RowFilter = String.Format("Load_ID = '{0}'", IDnow); 
      DataTable temptable = dv2.ToTable(); 

      for (int j = 0; j < 8760; j++) 
      { 
       string colPnow = SP_dt.Columns[j*2 + 4].ColumnName.ToString(); 
       double ColP_sum= (double)temptable.Compute("Sum(colPnow)", String.Format("Load_ID = '{0}'", IDnow)); 
       string colQnow = SP_dt.Columns[j*2 + 5].ColumnName.ToString(); 
       double ColQ_sum = (double)temptable.Compute("Sum(colQnow)", String.Format("Load_ID = '{0}'", IDnow)); 

       Load_dt.Rows[i][j * 2 + 2] = ColP_sum; 
       Load_dt.Rows[i][j * 2 + 3] = ColQ_sum; 
      } 

     } 
+0

В какой строке возникает ошибка? Вы уверены, что у вашего datatable есть столбец с именем colPnow? – Peroxy

+0

Имя столбца не имеет «colPnow». Но colPnow определяется как строка для столбца. – Daniel

+0

Что делать, если вы попытаетесь изменить линию вычислений на: 'double ColP_sum = (double) temptable.Compute (String.Format (" Сумма ({0}) ", colPnow), String.Format (" Load_ID = '{0} ', IDnow)); ' – Peroxy

ответ

2

Вы не форматируете строку выражения правильно в методе Compute. Используйте другой String.Format, и он будет работать. Ваше выражение Compute в настоящее время буквально равно "Sum(colPnow)". Вам нужна строка имени столбца, которая хранится в вашей переменной colPnow.

Изменить эту часть вашего кода к этому:

string colPnow = SP_dt.Columns[j*2 + 4].ColumnName.ToString(); 
double ColP_sum= (double)temptable.Compute(String.Format("Sum([{0}])", colPnow), 
              String.Format("Load_ID = '{0}'", IDnow)); 

То же самое должно быть сделано для colQnow переменной. Я также предлагаю вам прочитать, как работает String.Format, чтобы вы могли понять концепцию форматирования строк.

+0

У меня появилось следующее сообщение об ошибке при переходе ко второй строке вышеприведенного кода: Дополнительная информация: Ошибка синтаксиса в агрегированном аргументе: Ожидание одного аргумента столбца с возможным квалификатором' Child '. – Daniel

+0

Попробуйте включить выражение с квадратными скобками '' и '' '. Обновлен мой ответ. – Peroxy

+0

Большое спасибо. Теперь код запущен. Поскольку у него много вычислений цикла, это занимает много времени и все еще работает. Я жду, чтобы увидеть результаты. Большое спасибо! Я уже много думал о том, как рассчитать это в datatable. Большое спасибо за помощь! – Daniel