C# Linq组提供了不正确的统计数据
我有一个表格,我想从中计算以下状态的统计信息: 预期产出:C# Linq组提供了不正确的统计数据,c#,entity-framework,linq,group-by,C#,Entity Framework,Linq,Group By,我有一个表格,我想从中计算以下状态的统计信息: 预期产出: Active = 12 OnHold = 10 Closed = 14 Filled = 15 Expired = 24 查询1: var statistics = (from j in context.Job where j.CompanyID == 100 && {100,101,102,103, 104 }.Contains(j.Status
Active = 12
OnHold = 10
Closed = 14
Filled = 15
Expired = 24
查询1:
var statistics = (from j in context.Job
where j.CompanyID == 100 &&
{100,101,102,103, 104 }.Contains(j.StatusID)
(j.ActiveDate == "0001-01-01" ? (j.CreationDate >= fromDate && j.CreationDate <= toDate):
(j.ActiveDate >= fromDate && j.fromDate <= today))
group j by new
{
j.StatusID
}
into g
select new
{
ActiveStats = g.Count(inner => (inner.StatusID == 100)),
OnHoldStats = g.Count(inner => (inner.StatusID == 101)),
}).FirstOrDefault();
var statistics = (from j in context.Job
where j.CompanyID == 100 &&
{100,101,102,103, 104 }.Contains(j.StatusID)
(j.ActiveDate == "0001-01-01" ? (j.CreationDate >= fromDate && j.CreationDate <= toDate):
(j.ActiveDate >= fromDate && j.fromDate <= today))
group j by 1 into g
into g
select new
{
ActiveStats = g.Count(inner => (inner.StatusID == 100)),
OnHoldStats = g.Count(inner => (inner.StatusID == 101)),
}).FirstOrDefault();
var statistics=(来自context.Job中的j
其中j.CompanyID==100&&
{100101102103,104}.Contains(j.StatusID)
(j.ActiveDate==“0001-01-01”?(j.CreationDate>=fromDate&&j.CreationDate=fromDate&&j.fromDate(internal.StatusID==100)),
OnHoldStats=g.Count(内部=>(内部.StatusID==101)),
}).FirstOrDefault();
对于上面的查询,“ActiveStats”和“OnHoldStats”的统计数据不正确
查询2:
var statistics = (from j in context.Job
where j.CompanyID == 100 &&
{100,101,102,103, 104 }.Contains(j.StatusID)
(j.ActiveDate == "0001-01-01" ? (j.CreationDate >= fromDate && j.CreationDate <= toDate):
(j.ActiveDate >= fromDate && j.fromDate <= today))
group j by new
{
j.StatusID
}
into g
select new
{
ActiveStats = g.Count(inner => (inner.StatusID == 100)),
OnHoldStats = g.Count(inner => (inner.StatusID == 101)),
}).FirstOrDefault();
var statistics = (from j in context.Job
where j.CompanyID == 100 &&
{100,101,102,103, 104 }.Contains(j.StatusID)
(j.ActiveDate == "0001-01-01" ? (j.CreationDate >= fromDate && j.CreationDate <= toDate):
(j.ActiveDate >= fromDate && j.fromDate <= today))
group j by 1 into g
into g
select new
{
ActiveStats = g.Count(inner => (inner.StatusID == 100)),
OnHoldStats = g.Count(inner => (inner.StatusID == 101)),
}).FirstOrDefault();
var statistics=(来自context.Job中的j
其中j.CompanyID==100&&
{100101102103,104}.Contains(j.StatusID)
(j.ActiveDate==“0001-01-01”?(j.CreationDate>=fromDate&&j.CreationDate=fromDate&&j.fromDate(internal.StatusID==100)),
OnHoldStats=g.Count(内部=>(内部.StatusID==101)),
}).FirstOrDefault();
我得到了上述查询的“ActiveStats”和“OnHoldStats”的正确统计信息
我只是不明白为什么查询1的结果不正确,为什么查询2的结果正确
另外,哪个查询在性能方面更有效
我很想了解这两个查询之间的区别,以及在效率和性能方面我应该选择哪个查询。根据所需的输出,您必须运行以下查询:
var查询=
来自上下文中的j.Job
其中j.CompanyID==100&&
{100101102103,104}.Contains(j.StatusID)
(j.ActiveDate==“0001-01-01”?(j.CreationDate>=fromDate&&j.CreationDate=fromDate&&j.fromDate哪个EF版本?@SvyatoslavDanyliv其6.1.3尝试用总和
替换计数
:Activestats=g.Sum(inner=>(inner.StatusID==100?1:0)
@SvyatoslavDanyliv我也这么做了,但查询1的结果仍然不正确。在对StatusID
进行摸索后,SQL Server将传递给Count
仅统计此StatusID的记录。因此,您无法统计其他状态。group by 1
是假分组,这使得单记录查询只包含聚合。