我有一个对象,对象的一个属性是逗号分隔的名称列表。
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查询这些数据,拆分审计师属性,按审计师分组,并为每个审计师总计时间,给出一份审计员列表,列出针对每个审计员花费的时间。
亚当·韦斯特15
乔治·贝斯特10
猫王普雷斯利3
有人能帮我吗?谢谢。
发布于 2013-07-30 08:10:34
这应该是你想做的事:
var query =
from a in auditData
let auditors = a.Auditors.Split(',').Select(s => s.Trim())
from au in auditors
group a.TimeSpent by au into g
select new { Auditor = g.Key, TimeSpent = g.Sum() };发布于 2013-07-30 08:17:44
使用lambdas:
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();发布于 2013-07-30 08:28:02
var res = auditData.Select(audit => audit.Auditors.Split(',').ToDictionary(a => a, a => audit.TimeSpent))
.SelectMany(a => a)
.GroupBy(a => a.Key)
.ToDictionary(g => g.Key, s => s.Sum(g => g.Value));首先拆分字符串并转换为KeyValue对。然后把字典压成一本。然后分组和和。
https://stackoverflow.com/questions/17941346
复制相似问题