另一个列表中列表中项目的扩展方法[重复]

Posted

技术标签:

【中文标题】另一个列表中列表中项目的扩展方法[重复]【英文标题】:Extension method on Item in List within another List [duplicate] 【发布时间】:2016-11-14 16:10:32 【问题描述】:

我正在尝试对另一个 List<> 内的 List<> 中的每个项目执行运行扩展方法,以返回给定类型的集合(由扩展方法返回)。

我最初尝试(但失败)使用 linq 执行此操作,但我有以下内容:

        var dataset = GetReportDataset(org);

        var reportData = new List<InterventionAndNeetRiskReportLineModel>();

        foreach (var record in dataset)
        
            foreach (var inter in record.InterventionHistory)
            
                 reportData.Add(inter.ToInterventionAndNeetRiskReportLineModel());
            
        
        return _reportWriter.ReportCsvStream(reportData);

所以我的问题是,如何使用 linq 为子集合中的每个项目投影我的扩展方法的结果?

更新ToInterventionAndNeetRiskReportLineModel()扩展方法

    public static InterventionAndNeetRiskReportLineModel ToInterventionAndNeetRiskReportLineModel(this InterventionHistory intervention)
    
        return new InterventionAndNeetRiskReportLineModel()
        
            Beneficiary = intervention.Person.Beneficiary,
            CourseTitle = intervention.CourseTitle,
            CaseNotes = intervention.CaseNotes,
            EndDate = intervention.EndDate?.ToString(),
            StartDate = intervention.StartDate.ToString(),
            ParticipantId = intervention.Person.ParticipantId,
            FirstEit = intervention.Person.EitScores.GetFirstEitReading().ToString(),
            LastEit = intervention.Person.EitScores.GetLastEitReading().ToString(),
            FirstLpt = intervention.Person.LptScores.GetFirstLptReading().ToString(),
            LastLpt = intervention.Person.LptScores.GetLastLptReading().ToString(),
            Gender = intervention.Person.Equalitites.Gender,
            HoursAttended = intervention.NoOfHours.ToString(),
            LanguageOfDelivery = intervention.DeliveryLanguage,
            Providername = intervention.ProviderName,
            QanCode = intervention.QanCode,
            SchoolCollegeName = intervention.ProviderName
        ;
    

【问题讨论】:

不清楚扩展方法是什么,也不清楚“and failed”是什么意思。请提供minimal reproducible example。 您是否只是想查找一个列表中属于另一个列表的所有元素?您不需要为此进行扩展。 添加了扩展方法 record.InterventionHistory的类型是什么,那么inter的类型是什么?您将 InterventionHistory 用作集合 (foreach) 和平面类型(在扩展方法中)。两者之一但不是两者都应该是这种情况。在var 上轻松一点,写出一些类型,看看你哪里出错了。 【参考方案1】:

我不完全确定要将问题代码的哪一部分分离到扩展方法中。另外,不要专注于扩展方法部分,就写作而言,它与其他功能没有什么不同。

您可以使用SelectMany 来获取InterventionHistory 对象的平面列表,并使用Select 来转换为InterventionAndNeetRiskReportLineModelToList 作为列表而不是IEnumerable&lt;T&gt; 的最终结果。真的很需要。

var reportData = GetReportDataset(org)
    .SelectMany(r => r.InterventionHistory)
    .Select(i => i.ToInterventionAndNeetRiskReportLineModel())
    .ToList();

所以,也许你想要一个扩展方法,比如

public static IEnumerable<InterventionAndNeetRiskReportLineModel> ToInterventionRiskReports(this IEnumerable<ReportDataset> _self)
     return _self
        .SelectMany(r => r.InterventionHistory)
        .Select(i => i.ToInterventionAndNeetRiskReportLineModel());

并将其用作

var reportData = GetReportDataset(org).ToInterventionRiskReports().ToList();

...正如我所说,它并不完全清楚,您想将哪一部分重构为扩展方法。

【讨论】:

SelectMany 是我所追求的解决方案。谢谢!!我的问题本来可以更清楚,但感谢您的努力。

以上是关于另一个列表中列表中项目的扩展方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

csharp C#项目的有用扩展方法的运行列表。

可以使用 Data Extender 扩展收藏夹列表吗?

python中列表增加元素的方法

C++ 用另一个向量扩展一个向量

选择时如何让wpf listboxitem拉伸列表框的整个高度

如何在泛型集合上创建扩展方法