【问题标题】:Lambda or LINQ for result结果的 Lambda 或 LINQ
【发布时间】:2019-03-23 23:12:24
【问题描述】:

我从用户那里得到了一个反馈表,反馈类包含步骤。

步骤可以实现 (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 有一种简单的方法。谁能帮忙,拜托。

【问题讨论】:

  • 总是有4个步骤吗?
  • 另外,list[0, i] 中的i 是什么?
  • 不,还有更多步骤。不用担心 list[0,i]pls

标签: c# .net linq asp.net-core lambda


【解决方案1】:

如果我理解它,您希望按步骤和状态进行分组计数,如果您希望将其作为子数组,您可以这样做

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 不太确定女巫更好。

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2023-04-04
    • 1970-01-01
    • 2020-07-07
    • 2011-08-08
    相关资源
    最近更新 更多