Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq组提供了不正确的统计数据_C#_Entity Framework_Linq_Group By - Fatal编程技术网

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
是假分组,这使得单记录查询只包含聚合。