我想获取一份报告的汇总数据,该报告显示 Entity Framework 语法中每个决策的总量和供应商计数。我的结果需要包含每个决策的供应商总数和总供应商数量的总和。
我有一个包含以下列的供应商表:
供应商编号 |决定 |决定发布日期 |金额 |供应商集团 |子供应商
获取特定时间段以上数据的原始 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 Decision = 'Approved' AND SupplierGroup ='ABC' AND SubSupplier ='zxc'
问题是我很难使用 Entity Framework lambda 表达式而不是原始 SQL 获得所需的结果。
到目前为止我做了什么:
我检查了来自 fornt-end 的 Options 的可用性以构建 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 does not contain a definition for SupplierNo, and no extension method blah blah blah...
但在那之后我无法获取数据,因为原始查询(如上所述)会获取我。谢谢
最佳答案
这应该会为您提供与 SQL 查询类似的结果。试一试,看看进展如何:
var results = suppliers
.Where(i => i.DecisionIssuedOn >= selectedDecisionIssuedOn)
.GroupBy(i => i.Decision)
.Select(group => new
{
Decision = group.Key,
TotalAmount = group.Sum(g => g.Amount),
SupplierCount = group.Select(i => i.SupplierNo).Distinct().Count()
});
关于c# - 在 Entity Framework 中选择作为子查询接收的列的不同计数和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56079176/