使用 Linq;我该怎么做Take的“相反”?
即而不是获取前 n 个元素,例如 in
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 to SQL或NHibernate Linq的情况下,如果生成的 SQL 处理它并生成类似的东西(对于 SQL Server/T-SQL),那就太好了
SELECT TOP(SELECT COUNT(*) -@n FROM ATable) * FROM ATable
或者其他一些更聪明的 SQL 实现。
我想没有什么类似的吧?(但编辑实际上不是问题的一部分。)