添加项目计数LINQ选择

本文关键字:LINQ 选择 项目 添加 | 更新日期: 2023-09-27 18:05:13

我有一个问题,我想不起来。

我有一个Sharepoint项目列表,其中有类别。我想阅读所有类别,并计算它们出现的频率。

在另一种方法中,我想取categoryCount,用它除以总票数,再乘以100得到百分比。

问题是计数。

这是我到目前为止的查询:

public IEnumerable<KategorieVM> GetAllCategories()
{
int counter = 0;
var result = (from t in Tickets
where t.Kategorie != Kategorie.Invalid && t.Kategorie != Kategorie.None && t.Kategorie != null
select new KategorieVM() { _name = t.Kategorie.ToString(), _val = counter++ });

return result;
}

的问题是,我不能使用计数器++。是否有一个干净的解决方案?为统计每个类别而构建查询的选项不是有效的选项。该列表有15000个列表,并且还在不断增长。最后,我需要遍历每个类别,并调用查询来计算门票,这只需要大约3分钟。因此,在一个查询中计算类别是强制性的。

任何帮助都非常感谢。

/edit:为清楚起见:计数器++作为计数只是一个大脑放屁-我不知道我为什么要尝试它;这将产生一个索引。我需要一种方法来计算"类别"在这15k个条目中出现的频率。

添加项目计数LINQ选择

您可以使用GroupBy在查询本身中执行Count:

return Tickets
           .Where(t =>  t.Kategorie != Kategorie.Invalid && t.Kategorie != Kategorie.None && t.Kategorie != null)
           .GroupBy(t => t.Kategorie.ToString())
           .Select(g => new KategorieVM() { _name = g.Key, _val = g.Count() });