Я хочу получить обобщенные данные для отчета, который показывает общую сумму и количество поставщиков в каждом решении в синтаксисе Framework организации. Мой результат должен был включать СУММУ Суммы и СЧЕТА общих поставщиков за решение.
У меня есть таблица поставщиков со следующими столбцами:
SupplierNo | Decision | DecisionIssuedOn | Amount | SupplierGroup | SubSupplier
Необработанный SQL-запрос для получения вышеуказанных данных за определенный период времени:
SELECT S.Decision, SUM(S.Amount) AS TotalAmount, COUNT(DISTINCT S.SupplierNo) AS SupplierCount
FROM (SELECT * FROM Indentors WHERE Indentors.DecisionIssuedOn BETWEEN '2018-01-01' AND '2018-12-31') S
GROUP BY S.Decision
Что дает данные как:
SupplierCount | Amount
-----------------------
Approved 20 | 5000
Rejected 11 | 3000
In-Process 5 | 1500
Теперь из внешнего интерфейса параметры условия могут быть любыми из заданного пула параметров (раскрывающихся списков), которые при выборе добавляют выражение where в запросе на добавление, например
WHERE Decision = 'Approved' AND SupplierGroup ='ABC' AND SubSupplier ='zxc'
Проблема в том, что мне трудно получить желаемый результат, используя лямбда-выражения Entity Framework вместо необработанного SQL.
Что я сделал до сих пор:
Я проверил наличие опций из fornt-end для сборки where, как:
IQueryable<Supplier> suppliers = this.db.suppliers.OrderByDescending(i => i.Id);
if (string.IsNullOrEmpty(selectedSupplierGroup) == false)
{
suppliers = suppliers.Where(i => i.SupplierGroup == selectedSupplierGroup);
}
if (string.IsNullOrEmpty(selectedSubSupplier) == false)
{
suppliers = suppliers.Where(i => i.SubSupplier == selectedSubSupplier);
}
if (string.IsNullOrEmpty(selectedDecision) == false)
{
suppliers = suppliers.Where(i => i.Decision == selectedDecision);
}
if (selectedDecisionIssuedOn.HasValue)
{
suppliers = suppliers.Where(i => i.DecisionIssuedOn >= selectedDecisionIssuedOn);
}
var result = suppliers
.GroupBy(i => i.Decision)
.Select(i => i.SupplierNo).Distinct().Count(); // Gives me error
Ошибка:
IGrouping не содержит определения для SupplierNo, и нет метода расширения бла-бла-бла-бла ...
Но после этого я не могу получить данные, поскольку необработанный запрос (описанный выше) получит меня. Спасибо