我一直在努力为LINQ找到一种能够选择给定列表的前n%的方法。我能得到的最接近的是take语句,它与TOP PERCENT SQL语句类似,但不支持百分比。我确定我错过了一些明显的东西,但我似乎无法看到它。
答案 0 :(得分:5)
假设来源是ICollection<T>
(而不只是IEnumerable<T>
),您可以这样做:
public static IEnumerable<T> TakePercent<T>(this ICollection<T> source, double percent)
{
int count = (int)(source.Count * percent / 100);
return source.Take(count);
}
请注意,它可以使用IEnumerable<T>
(使用Count()
方法),但它会枚举序列两次,这通常被认为是一件坏事。