Использование 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 to SQL или NHibernate Linq было бы неплохо, если бы сгенерированный SQL позаботился об этом и сгенерировал что-то вроде (для SQL Server/T-SQL)
SELECT TOP(SELECT COUNT(*) [email protected] FROM ATable) * FROM ATable
Или какая-то другая более умная реализация SQL.
Я полагаю, что нет ничего подобного? (Но редактирование на самом деле не было частью вопроса.)