我有一个Record对象队列,如下所示:
public class Record
{
public string TypeDesc { get; set; }
public Queue<Total> Totals { get; set; }
etc.....
}
我在编写LINQ表达式时难以提取只有每个TypeDesc中的一个但在每个TypeDesc中的子集,而Totals队列中的Total对象总数最多。
我不确定这是否重要,但只有一个TypeDesc在Totals队列属性中有Total对象。所有其他队列都是空的。大约有8个独特的TypeDesc值。
这是我的尝试,但是&#34; s&#34;上没有总计财产。
var records = Records.Select(c =&gt; c.TypeDesc)。其中(s =&gt; s.Totals.Count).Max()。Distinct();
答案 0 :(得分:3)
TypeDesc
属性Totals.Count
最高的那个。
records.GroupBy(r => r.TypeDesc)
.Select(
g => g.Aggregate((acc, current) => current.Totals.Count > acc.Totals.Count
? current
: acc));
对于像这样的复杂查询,最好稍微打破逻辑,使代码更具可读性:
Func<IEnumerable<Record>, Record> mostTotals =
group => group.Aggregate(
(acc, current) => current.Totals.Count > acc.Totals.Count
? current
: acc);
var records = records.GroupBy(r => r.TypeDesc)
.Select(mostTotals);
通过使用Aggregate
来实现第2步,{{3}}遍历该组中的记录,并使用&#34;累加器&#34;跟踪每次迭代时Totals.Count
最高的记录。
为简化起见,聚合函数等同于:
//for each group
Record acc = null;
foreach(var current in group)
acc = current.Totals.Count > acc.Totals.Count
? current
: acc;