C# 将项目计数添加到LINQ select
我有一个问题,我想不起来 我有一个Sharepoint项目列表,其中包含类别。我想阅读所有类别,并计算它们出现的频率 在另一种方法中,我想取categoryCount,除以总票数,再乘以100得到一个百分比 问题在于计数 这是我目前的疑问: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 !=
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
是这种情况下的合适方法。