使用LINQ获取列表的前N%

时间:2013-05-01 23:38:25

标签: c# linq list

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

1 个答案:

答案 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()方法),但它会枚举序列两次,这通常被认为是一件坏事。