Linqを使用する; どうすればTakeの「反対」を行うことができますか?
つまり、次のように最初のn個の要素を取得する代わりに
aCollection.Take(n)
最後のn個の要素以外のすべてを取得したい。何かのようなもの
aCollection.Leave(n)
(理由を聞かないでください:-)
編集
私はそれをこのようaCollection.TakeWhile((x, index) => index < aCollection.Count - n)
に、または拡張の形で行うことができると思います
public static IEnumerable<TSource> Leave<TSource>(this IEnumerable<TSource> source, int n)
{
return source.TakeWhile((x, index) => index < source.Count() - n);
}
しかし、Linq toSQLまたはNHibernateLinqの場合、生成されたSQLがそれを処理し、(SQL Server / T-SQLの場合)のようなものを生成したとしたら良かったでしょう。
SELECT TOP(SELECT COUNT(*) -@n FROM ATable) * FROM ATable
または、他のより巧妙なSQL実装。
私はそれのようなものはないと思いますか?(しかし、編集は実際には質問の一部ではありませんでした。)