Выбрать и извлечь значения из DataRows в DataTable - C # - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть метод, который принимает эти аргументы:

public bool CalculateProvent(ArrayList UPs, 
                             ArrayList DateExtraction, 
                             DataTable SourceData

{

...
...
}

Источник данных DataData имеет следующее содержимое (например):

UP - DateExtraction - Energy1 - Energy2 - Consumption1 - Consumption2 - etc

с некоторыми значениями:

780 - 2011-11-12 14:00:00 - 30.50 - NULL - NULL - 12.00
780 - 2011-11-12 15:00:00 - 31.50 - NULL - 10 - 12.00
781 - 2011-11-12 14:00:00 - NULL - 6 - NULL - 12.00
...

Мне нужно перебрать эту таблицу данных на основе UPs и массивов DataExtraction, чтобы извлечь необходимые значения полей (Energy1 и т. Д.).

Например:

Decimal myEnergy1, myEnergy2, myConsumption1, myConsumption2

foreach(int up in UPs)
{
    foreach(DateTime myTime in DateExtraction)
  {

   // Here I have to select the correct row and extract my fields
  }

}

КакЯ выбираю правильные значения в этой итерации?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Я думаю, что-то вроде этого может быть тем, что вы ищете.

var q = from up in UPs.Cast<int>()
        from myTime in DateExtraction.Cast<DateTime>()
        join r in SourceData.AsEnumerable() on 
          new { r.Field<int>("UP"), r.Field<DateTime>("DateExtraction")} equals
          new { up, myTime }
        select new
        {
           Energy1 = r.Field<Decimal>("Energy1"),
           Energy2 = r.Field<Decimal>("Energy2")
        };
0 голосов
/ 16 ноября 2011

попробуйте это:

foreach(int up in UPs)
{
  foreach(DateTime myTime in DateExtraction)
  {
    DataRow[] myRows = SourceData.Select("UP=" + up + " AND DateExtraction='" + myTime.ToString() + "'");

    if(myRows != null && myRows.Length == 1)
    {
      // here is your row... myRows[0]
    }
  }
}

конечно, следует улучшить и обратить внимание на формат myTime.ToString (). Конечно, это также можно сделать с красивым и компактным LINQ to DataSets

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...