c# - LINQ 删除组中具有特定值的项目

标签 c# linq group-by

我有代码,我按机会编号对我的要求进行分组,如下所示:

        List<Requirement> result = requirements
                                    .GroupBy(l => l.CRMOpportunityNumber)
                                    .Select(cl => new Requirement
                                    {
                                        CRMOpportunityNumber = cl.First().CRMOpportunityNumber,
                                        OpportunityTitle = cl.First().OpportunityTitle,
                                        ClientName = cl.First().ClientName,
                                        TentativeStartDate = cl.Min(c => c.TentativeStartDate),
                                        TotalPositions = cl.Sum(c => c.Required),
                                        RegionName = cl.First().RegionName,
                                        TotalCVProposed = cl.Sum(c => c.Associates.Count),
                                        TotalDeployed = cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true)),
                                        NetGap = cl.Sum(c => c.Required) - cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true)),
                                    }).OrderByDescending(l => l.CRMOpportunityNumber).ToList();

现在我不想将所有 CATEGORY 字段值都等于“工作开始”的分组(结果)包含在这些要求中。

需求类有一个字段类别。

最佳答案

在分组前使用 Where 子句排除“工作已开始”类别

    List<Requirement> result = requirements
                                .Where(r => r.Category != "work commenced")
                                .GroupBy(l => l.CRMOpportunityNumber)
                                .Select(cl => new Requirement
                                {
                                    CRMOpportunityNumber = cl.First().CRMOpportunityNumber,
                                    OpportunityTitle = cl.First().OpportunityTitle,
                                    ClientName = cl.First().ClientName,
                                    TentativeStartDate = cl.Min(c => c.TentativeStartDate),
                                    TotalPositions = cl.Sum(c => c.Required),
                                    RegionName = cl.First().RegionName,
                                    TotalCVProposed = cl.Sum(c => c.Associates.Count),
                                    TotalDeployed = cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true)),
                                    NetGap = cl.Sum(c => c.Required) - cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true)),
                                }).OrderByDescending(l => l.CRMOpportunityNumber).ToList();

编辑

如果您想排除所有需求都属于“工作开始”类别的组,如何:

List<Requirement> result = requirements
    .GroupBy(l => l.CRMOpportunityNumber)
    .Where(cl => cl.All(l => l.Category != "work commenced"))
    .Select(cl => new Requirement
    {
        CRMOpportunityNumber = cl.First().CRMOpportunityNumber,
        OpportunityTitle = cl.First().OpportunityTitle,
        ClientName = cl.First().ClientName,
        TentativeStartDate = cl.Min(c => c.TentativeStartDate),
        TotalPositions = cl.Sum(c => c.Required),
        RegionName = cl.First().RegionName,
        TotalCVProposed = cl.Sum(c => c.Associates.Count),
        TotalDeployed = cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true)),
        NetGap = cl.Sum(c => c.Required) - cl.Sum(c => c.Associates.Count(x => x.IsIdentified == true))
    }).OrderByDescending(l => l.CRMOpportunityNumber)
    .ToList();

关于c# - LINQ 删除组中具有特定值的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503038/

相关文章:

c# - HasFlag 始终返回 True

.net - 使用 linq 选择组合

c# - 将匿名类型转换为 List<KeyValuePair>

mysql - 尝试使用 CASE 过滤查询结果

mysql - 使用 Group By 修剪 MySQL 表

php - GROUP BY 用作列的行上的某个值

c# - 与 Windows 命名管道 (.Net) 的异步双向通信

c# - SqlBulkCopy 插入标识列

c# - 两个列表相交会产生空列表

linq - 与Sitecore ContentSearch API匹配的词组