使用LINQ获取列表的前N%

Dam*_*ayn 1 c# linq list

我一直试图找到一种方法让LINQ能够选择给定列表的前n%.我能得到的最接近的是take语句,它与TOP PERCENT SQL语句类似,但不支持百分比.我确定我错过了一些明显的东西,但我似乎无法看到它.

Tho*_*que 6

假设源是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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,它可以使用IEnumerable<T>(使用该Count()方法),但它会枚举序列两次,这通常被认为是一件坏事.