ЕСЛИ лучше подход - PullRequest
       6

ЕСЛИ лучше подход

0 голосов
/ 13 октября 2019

У меня есть Таблица ниже, и я хочу подсчитать, во сколько раз значение строки больше 2.

enter image description here

Обратите внимание, что столбцы связаны, 1-й столбец-> 3-й, 2-й-> 4-й. Иногда я хочу посчитать, если tms = " abc ", а иногда, если они противоположны abc .

Есть ли другой подход для этого случая?

var_case = 1;
var tms = "abc";   
foreach (DataRow r in d.Rows)
{
        gCount+= cases(r, _case, tms, true) ? 1 : 0;
       // gCount+= cases(r, _case, tms) ? 1 : 0;
}
private bool cases(DataRow d, int _case, string tms = "", bool t = false)
{
        var h = d.ItemArray[0].ToString();
        bool res = false;
        switch (_case)
              {
              case 1: res = (h == tms) ? ((!t) ? ((int)d.ItemArray[2] > 2) ? true : false : ((int)d.ItemArray[3] > 2) ? true : false) : ((!t) ? ((int)d.ItemArray[3] > 2) ? true : false: ((int)d.ItemArray[2] > 2) ? true : false); break;
              default:
                     break;
              }
return res;
}

1 Ответ

0 голосов
/ 13 октября 2019

Вы можете использовать Linq для подсчета строк, делая подсчет строк более явным.

var _case = 1;
var tms = "abc";
int gCount = table.Rows
    .Cast<DataRow>()
    .Count(r => cases(r, _case, tms, false));

В условии вы можете разделить получение индекса столбца и получение данных. Это сделало бы вещи менее сложными.

private static bool cases(DataRow dataRow, int _case, string tms = "", bool invertedSearch = false)
{
    switch (_case)
    {
        case 1:
            string h = (string)dataRow.ItemArray[0];
            int column = (h == tms) ^ invertedSearch ? 2 : 3;
            return (int)dataRow.ItemArray[column] > 2;
        default:
            return false;
    }
}
...