C# 一个LINQ表达式中的计数和不同计数
是否有办法将2个linq表达式组合成一个?也就是说,一个LINQ表达式将把DistCount和NormCount返回到两个独立的int变量中C# 一个LINQ表达式中的计数和不同计数,c#,.net,linq,c#-4.0,C#,.net,Linq,C# 4.0,是否有办法将2个linq表达式组合成一个?也就是说,一个LINQ表达式将把DistCount和NormCount返回到两个独立的int变量中 DistCount = (from string row in myList[i] where row.Length > 0 select row).Distinct().Count(); NormCount = (from string row in myList[i]
DistCount = (from string row in myList[i]
where row.Length > 0
select row).Distinct().Count();
NormCount = (from string row in myList[i]
where row.Length > 0
select row).Count();
您可以尝试选择匿名类型:
from string row in myList[i]
where row.Length > 0
select new {
DistCount = row.Distinct().Count(),
NormCount = row.Count()
}
按行进行分组。然后您将得到不同的计数(#组数)和总数(
count
s之和)
来回答您的问题。没有内置的linq表达式 旁注。如果您确实需要它,可以创建一个
public static class Extensions
{
public static Tuple<int, int> DistinctAndCount<T>(this IEnumerable<T> elements)
{
HashSet<T> hashSet = new HashSet<T>();
int count = 0;
foreach (var element in elements)
{
count++;
hashSet.Add(element);
}
return new Tuple<int, int>(hashSet.Count, count);
}
}
或者正如我个人更愿意写的那样:
var distinctAndCount = myList[i].Where(row => row.Length > 0).DistinctAndCount();
var final=new{DistCount=1,NormCount=2}
row.Distinct().Count()将计算字符串行中的不同字符数,而不是作者所需的字符数。隐藏代码意图的代码将需要放入具有良好名称或注释的单独方法中。表现也是有问题的。记住在q的末尾有一个“ToList”,否则你会对整个小组做两次
var distinctAndCount = (from string row in myList[i]
where row.Length > 0
select row
).DistinctAndCount();
var distinctAndCount = myList[i].Where(row => row.Length > 0).DistinctAndCount();