C# 将项目计数添加到LINQ select

C# 将项目计数添加到LINQ select,c#,linq,c#-4.0,sharepoint,C#,Linq,C# 4.0,Sharepoint,我有一个问题,我想不起来 我有一个Sharepoint项目列表,其中包含类别。我想阅读所有类别,并计算它们出现的频率 在另一种方法中,我想取categoryCount,除以总票数,再乘以100得到一个百分比 问题在于计数 这是我目前的疑问: public IEnumerable<KategorieVM> GetAllCategories() { int counter = 0; var result = (from t in Tickets where t.Kategorie !=

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

我有一个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;
}
public IEnumerable GetAllCategories()
{
int计数器=0;
var结果=(来自票据中的t)
其中t.Kategorie!=Kategorie.Invalid&&t.Kategorie!=Kategorie.None&&t.Kategorie!=null
选择new KategorieVM(){{u name=t.Kategorie.ToString(),[u val=counter++});
返回结果;
}
问题是,我不能使用计数器++。有干净的解决办法吗?为计算每个类别而生成查询的选项无效。该列表有15000个列表项,而且还在不断增加。最后,我需要遍历每个类别并调用查询来计算票数,这只需要大约3分钟。 因此,在一个查询中计算cateogray是必需的

非常感谢您的帮助

/编辑:为了清晰起见:
计数器++作为计数只是一个愚蠢的想法-我不知道为什么我要尝试它;这将产生一个索引。我需要一种方法来计算“类别”在这15k个条目中出现的频率。

您可以使用
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() });

请明确说明您希望每个结果项都有它的位置还是序列的计数?@Serv Yes-如果您想进行计数,您需要对这些项进行“分组”
GroupBy
是这种情况下的合适方法。