Получите индивидуальные значения из цикла Foreach и суммируйте все - PullRequest
0 голосов
/ 02 июня 2018

Это совершенно простая вещь и застрял в ней на некоторое время.Вот сценарий - у меня есть запрос, где я делаю Count с Group By.Затем повторяем его с циклом foreach следующим образом, чтобы получить отдельные значения:

var query = (from c in GetProducts()
             group c by c.Type into g
             select new
             {
               Type = g.Key,
               Count = g.Count()
             });

double value = 0;
double valTotal = 0;

double finalResult = 0;

foreach (var item in query)
{
   value = (((Convert.ToDouble(item.Count)) / 10) * 100); //Getting the count from the above query and this gets individual result set, say grouping category
   valTotal += value; //Trying to do the total of the 'value' result set and this doesn't return the appropriate sum

   finalResult = ((value / valTotal) * 100); Then trying to divide the individual values with the total in the end to get values in percentage
}

Пример: получение значений из цикла foreach и в переменной value, я получаю - 10, 20, 30, 40. Затемсуммируйте их все (10 + 20 + 30 + 40) = 100 и, наконец, снова индивидуальный набор результатов, например (10/100) * 100;(20/100) * 100 и так далее.Я ожидаю сделать это простым способом, но, похоже, что-то здесь упустил.Мы будем благодарны за любые предложения.

Примечание : переменная finalResult должна в конечном итоге возвращать индивидуальный набор результатов, подобный этому (10/100) * 100 = 10%;(20/100) * 100 = 20%.

1 Ответ

0 голосов
/ 02 июня 2018

Составьте список IGroupings, потому что он нам понадобится дважды:

var query = (from ...).ToList();

, а затем список процентов будет

decimal sum = query.Sum(g => g.Count);
var percentages = query
    .Select(g => (g.Count / sum) * 100)  // cast to double/decimal/int as required
    .ToList()
    ;

Обратите внимание, что это будет очень близкодо 100%, но это может быть немного.


Дополнительно, при условии Тип == Категория

.Select(g => new {
    Category = g.Key,
    Average = (g.Count / sum) * 100  // cast to double/decimal/int as required
   })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...