1

我一直在尝试寻找一种方法让 LINQ 能够选择给定列表的前 n%。我能得到的最接近的是 take 语句,它的工作方式类似于 TOP PERCENT SQL 语句,但不支持百分比。我确定我遗漏了一些明显的东西,但我似乎看不到它。

4

1 回答 1

8

假设源是一个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()方法)一起使用,但它会枚举序列两次,这通常被认为是一件坏事。

于 2013-05-02T00:22:07.480 回答