Как я могу получить процент в LINQ?

#sql #linq

#sql #linq

Вопрос:

Мой вопрос: как я могу перевести это в LINQ?

 select Reasons.Description, count(*) * 100.0 / sum(count(*)) over() AS Porcentage
from Rejected
iNNER JOIN Reasons
ON Rejected.Reason = Reasons.ReasonID
group by Reasons.Description
  

Или как я могу заполнить Ilist этим результатом, если я хочу использовать хранимую процедуру.

То, что я пытаюсь сделать, это просто получить процент каждого «типа описания» в числовом виде, чтобы я мог позже заполнить диаграмму пончиков.

Спасибо

Комментарии:

1. используете ли вы entity Framework?

2. Вместо того, чтобы делать это CTE, я бы использовал вложенный запрос для получения сгруппированных значений и внешнего запроса для преобразования этого в процент. Это было бы проще перевести в Linq для сущностей, я даже не уверен, что можно перевести CTE.

3. Да, используя entity framework

4. @Igor это имеет смысл.

Ответ №1:

Я бы рекомендовал получить исходные данные из вашего хранилища данных, а затем вычислить проценты либо на уровне приложений, либо разрешить вашему компоненту диаграммы определять проценты на основе этого исходного значения. Что-то вроде этого должно работать:

 var query = (from reason in dc.Reasons
            join reject in dc.Rejections on reason.ReasonID equals reject.Reason
            group reason by reason.Description into grouped
            select new { Reason = grouped.Key, ItemCount = grouped.Count() })
            .ToList(); 

// If you really need to generate the averages and not let your charting component figure the percentages out for you:
var totalItems = query.Sum(q => q.ItemCount);
var averages = query.Select(q => new { q.Reason, Average = q.ItemCount / totalItems * 100});

  

Если вы предпочитаете лямбды синтаксису запроса, загляните в GroupJoin .