C# 使用linq group by计算统计信息
我试图计算如下统计数据:C# 使用linq group by计算统计信息,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图计算如下统计数据: Id StateName 1 Failed 2 Succeeded 成功:10 失败:10 以下是我的表格: public partial class MyProgress { public int Id { get; set; } public int JobId { get; set; } public int TestPartId { get; set; }
Id StateName
1 Failed
2 Succeeded
成功:10
失败:10
以下是我的表格:
public partial class MyProgress
{
public int Id { get; set; }
public int JobId { get; set; }
public int TestPartId { get; set; }
public virtual TestPart TestPart { get; set; }
}
public partial class Job
{
public int Id { get; set; }
public string StateName { get; set; }
}
作业表包含如下记录:
Id StateName
1 Failed
2 Succeeded
这就是我试图计算静力学的方法:
var query = from p in context.MyProgress
join job in context.Jobs on p.TestPartId equals job.Id
where p.TestPart.Test.RegionId == 100
group p by new
{
p.TestPartId
} into g
select new
{
succeeded = g.Sum(e => g.First(). ? 1 : 0),
}).FirstOrDefault();
但在上面的查询中,在计算Successed和Failed stats时,我无法获取StateName属性,因为我无法在group by的一部分中进行选择
有人能帮我吗?您可以使用“分组依据”对感兴趣的结果进行分组,然后计算(一)组中的每种类型: 你也可以从另一个角度考虑,找到你感兴趣的
工作
s,但你仍然需要一组人来计算:
var ans2 = from j in Jobs
where (from p in MyProgress
where p.TestPart.RegionId == 100
select p.TestPartId).Contains(j.Id)
group j by 1 into jg
select new {
Succeeded = jg.Count(j => j.StateName == "Succeeded"),
Failed = jg.Count(j => j.StateName == "Failed")
};
注意:如果您可以获得包含每个状态和计数的表,则可以改为在StateName
上分组:
var ans3 = from p in MyProgress
where p.TestPart.RegionId == 100
join j in Jobs on p.TestPartId equals j.Id
group j by j.StateName into jg
select new {
StateName = jg.Key,
Count = jg.Count()
};
您是否只想要失败和成功的数量?或者您还需要其他信息吗?@maccettura只需要失败和成功的DownVoter的数量。请至少注意评论此问题中缺少的内容,以便我在发布下一个问题时记住。谢谢:)
分组方式创建新对象。改为使用p.TestPartId:按p.TestPartId分组p
此外,如果您仅将成功和失败作为状态,则可能改为使用布尔值HasSucceeded
。或者枚举也可以工作。为什么TestPartId
匹配job.Id
而不是JobId
?为什么您需要参考MyProgress
来计算作业的总统计数据
?非常感谢您对我的帮助。感谢:)