2013-12-19 5 views
2

Есть ли элегантный способ подсчета количества положительных значений в данных, без необходимости проходить через каждый элемент и проверять его? Я также посмотрел на метод DataTable.Compute и некоторые примеры LINQ, но все они требуют имени столбца, и мне нужна его для всей таблицы.Подсчитайте положительные значения в datatable

+0

Что делать вы подразумеваете под «целым столом»? Вы хотите проверить значения во всех столбцах таблицы? – quetzalcoatl

+0

Понимаете ли вы, что таблица, вероятно, также содержит некоторые «технические» столбцы, такие как первичные/внешние ключи, которые обычно также являются числами, а их «знак» не имеет смысла? – quetzalcoatl

+0

Я не мог представить ни одного сценария, где это было бы полезно. –

ответ

2

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

Нет необходимости (для кода), чтобы знать имена столбцов:

dt.AsEnumerable().Select(row1 => dt.Columns.Cast<DataColumn>() 
            .ToDictionary(column => column.ColumnName, column => row1[column.ColumnName])) 
       .SelectMany(f=>f.Values) 
       .Count(f=>decimal.Parse(f.ToString())>0); 

Пример:

6 положительны:

enter image description here

+0

@quetzalcoatl 1) он сказал, что не знал своих имен ... нет? 2) Также - ** нет ** без повторения всех элементов. –

+0

Я удалил все свои комментарии, потому что я только заметил, что вопрос был о «DataTable», а не о «таблице данных», поэтому речь идет о операциях внутри памяти, не запрашивающих базу данных. Я как-то неправильно понял это. Извините за любую путаницу. – quetzalcoatl

0

Считаете ли вы использование DataTable.Select?

int TotalPositiveValues = 0; 
foreach (DataColumn NextColumn in MyDataTable.Columns) 
{ 
    DataRow[] PositiveRows = MyDataTable.Select(NextColumn.ColumnName + " >=0"); 
    int TotalPositiveValues += PositiveRows.Length; 
} 

EDIT: условии, что все значения в ваш DataTable квалифицировать как числа.

Смежные вопросы