我有一组包含事务数据的对象。该数据集具有 3 级父子关系,级别为:项目 > 阶段 > 事务。对于每个项目和阶段,将有多个交易。
class CostElement
{
string ProjectNumber { get; set; }
string Stage { get; set; }
string DerivedCostElement { get; set; }
DateTime? Date { get; set; }
decimal? Amount { get; set; }
}
我想要找到的是一个唯一的成本元素列表 ( DerivedCostElement
),其中包含了它在任何给定单个项目中使用的最大次数。即计算每个项目出现的阶段数,然后选择最大值。
到目前为止,我尝试过的是:
//count all cost elements per project
var aggregateQuery = from ce in _costElements
group ce by new { ce.ProjectNumber, ce.Stage, ce.DerivedCostElement }
into g
select new
{
g.Key.DerivedCostElement,
g.Key.ProjectNumber,
g.Key.Stage
};
//select cost elements having max count
var countQuery = from g in aggregateQuery
group g by new { g.DerivedCostElement, g.ProjectNumber }
into grp
select new CostElementCount
{
CostElement = grp.Key.DerivedCostElement,
ProjectNumber = grp.Key.ProjectNumber,
Count = grp.Count()
};
return countQuery.ToList();
这在大多数情况下有效,我最终得到了每个项目的成本要素列表和每个项目的最大出现次数。但是结果仍然是每个项目,我想要的是一个只有最大值的唯一列表。
有人可以帮我获得正确的结果吗?此外,任何有关如何更有效或更简洁地编写此内容的建议将不胜感激。