另一个列表中列表中项目的扩展方法[重复]
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
来转换为InterventionAndNeetRiskReportLineModel
和ToList
作为列表而不是IEnumerable<T>
的最终结果。真的很需要。
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 是我所追求的解决方案。谢谢!!我的问题本来可以更清楚,但感谢您的努力。以上是关于另一个列表中列表中项目的扩展方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章