我有一个对象,该对象的属性之一是逗号分隔的名称列表,例如
IList<Audits> auditData = new List<Audits>();
auditData.Add(new Audit
{
Auditors = "Adam West, George Best",
TimeSpent = 7
});
auditData.Add(new Audit
{
Auditors = "Adam West",
TimeSpent = 5
});
auditData.Add(new Audit
{
Auditors = "Adam West, George Best, Elvis Presley",
TimeSpent = 3
});
我想使用 LINQ 来查询此数据,拆分审计员属性(property),按审计员分组并计算每个审计员花费的时间总和,以便给我一份审计员列表以及针对每个审计员花费的时间,例如
亚当·韦斯特 15,
乔治·贝斯特 10,
猫王 3
谁能帮我做这件事?谢谢。
最佳答案
使用 lambda:
var results =
auditData
// Flatten list - to list of individual auditors and time spent
.SelectMany(
audit => audit.Auditors.Split(',').Select(s => s.Trim()),
(audit, auditorName) => new
{
Auditor = auditorName,
TimeSpent = audit.TimeSpent,
})
// Group by auditor name
.GroupBy(a => a.Auditor)
// Sum time spent
.Select(auditorGroup => new
{
Auditor = auditorGroup.Key,
TotalTimeSpent = auditorGroup.Sum(a => a.TimeSpent)
})
.ToList();
关于LINQ 按结果属性拆分和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17941346/