c# - 结果的 Lambda 或 LINQ
问题描述
我从用户那里得到了一个反馈表,反馈类包含步骤。
步骤可以实现 (A)、未实现 (DA) 或通过提示实现 (AWP)
Name Step1 Step2 Step3 Step4
-----------------------------------------------------------------------
Zoinal A AWP A DA
Oomesh A DA DA DA
Marta A DA A AWP
MrBean AWP AWP DA A
但也想显示每个不同成就状态的数量。在表中是这样的:
Name Step1 Step2 Step3 Step4
summery: A=3,AWP=1,DA=0 A=0,AWP=2,DA=2 A=2,AWP=0,DA=2 A=1,AWP=1,DA=2
-----------------------------------------------------------------------
Zoinal A AWP A DA
Oomesh A DA DA DA
Marta A DA A AWP
MrBean AWP AWP DA A
public class FeedbackModel
{
public int FeedBackID { get; set; }
public List<FeedbackStepModel> FeedbackSteps { get; set; }
}
public class FeedbackStepModel
{
[Key]
public int FeedbackStepID { get; set; }
public int FeedbackID { get; set; } = 0;
public int StepNumber { get; set; }
public string StepDetail { get; set; }
public string AchievementStatus { get; set; }
public virtual FeedbackModel FeedBackModel { get; set; }
}
我试着做
var fullList = feedbackRepository.Feedbacks;
和两个“for each”循环
foreach (var item in fullList)
{
foreach (var step in item.FeedbackSteps)
{
//
}
}
我确信使用 LINQ 有一种简单的方法可以做到这一点。任何人都可以帮忙,拜托。
解决方案
如果我理解它,您希望按步骤和状态进行分组计数,如果您希望将此作为子数组,您可以这样做
var groupCount = from feedback in feedbacks
from step in feedback.FeedbackSteps
group step by step.StepNumber into stepsByNumber
select new
{
StepNumber = stepsByNumber.Key,
CountsByStatus = from byStep in stepsByNumber
group byStep by byStep.AchievementStatus into byAchievement
select new { AchievementStatus = byAchievement.Key, Count = byAchievement.Count() }
};
如果你只是想要双重分组然后像这样
var groupCount = from feedback in feedbacks
from step in feedback.FeedbackSteps
group step by new { step.StepNumber, step.AchievementStatus } into stepsByNumber
select new { stepsByNumber.Key.StepNumber, stepsByNumber.Key.AchievementStatus, Count = stepsByNumber.Count() };
编辑:经过更多思考后,IQueryable
您应该始终使用查询 2,然后在内存中执行子列表,因为第一个可能导致多个查询执行,或者只是一个不受支持的异常,这取决于查询提供程序。IEnumerable
不确定女巫一个更好。
推荐阅读
- reactjs - 在绘制元素之前如何获取元素?
- java - 如何在 Spring 中拥有多个相同的后端?
- ada - Gpr 文件,不要在源代码中包含所有目录
- android - 如何对全局文本使用 android 可访问性?
- google-bigquery - BigQuery 作业间歇性失败并出现 jobInternalError
- javascript - 使用 Angular 11 的 Leaflet 中的 onEachFeature 未绑定事件(单击、鼠标悬停 ..)
- python - 编辑 xml Annotations 数据集的标签
- elasticsearch - Elasticsearch Kubernetes 内存锁
- r - 无法在 RStudio 中安装软件包
- android - 来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个