var q = from X in Choices.Skip((page-1)*pageSize).Take(pageSize)
select X;
Теперь, если Вам нужно, где пункт в нем, он становится немного более хитрым:
var q = (from X in Choices
where x.SomeField == SomeValue
select X).Skip((page-1)*pageSize).Take(pageSize);
Смотрите к Queryable. Пропустите и Queryable. Возьмите методы.
Также видят это полезное дополнительные методы для подкачки страниц,
, с которым методы можно сделать это как это:
List<string> names = new List<string>();
names.AddRange(new string[]{"John","Frank","Jeff","George","Bob","Grant", "McLovin"});
foreach (string name in names.Page(2, 2))
{
Console.WriteLine(name);
}
Абсолютно - Skip()
и Take()
достигают подкачки страниц и поддерживаются в значительной степени всеми поставщиками LINQ.
В этом случае похоже на использование LINQ-to-Xml поэтому не стесняйтесь игнорировать следующий бит - но для получения общей информации: обратите внимание, что, если данные прибывают из базы данных с помощью хранимой процедуры, это твердо к странице в сервере. Можно, однако, сочинить (т.е. страница) "UDF" s. LINQ-TO-SQL UDFS (через [FunctionAttribute]
), но не Платформа Объекта. При использовании автоматически сгенерированных запросов базы данных, это не проблема.
Примечание, что с xml, Вы могли также сделать много с xpath - сюда использование XmlDocument
:
foreach (XmlElement el in doc.SelectNodes(
"/Root/BetaSection/Choices/SetA/Choice[position() > 11 and position() < 20]"))
{
Console.WriteLine(el.GetAttribute("id"));
}
или с Skip()
/ Take()
(все еще с XmlDocument
):
foreach (var el in doc.SelectNodes(
"/Root/BetaSection/Choices/SetA/Choice").Cast<XmlElement>()
.Skip(10).Take(10))
{
Console.WriteLine(el.GetAttribute("id"));
}
У James Curran есть он правильный, можно упростить это путем создания дополнительного метода для повторного использования позже.
Вы могли также изменить код для возврата Вас объект, который может отследить, сколько общего количества объектов находятся в списке и сколько страниц там должно быть основано на размере страницы и pageIndex.
public static IQueryable<T> ToPageOfList<T>(this IQueryable<T> source, int pageIndex, int pageSize)
{
return source.Skip(pageIndex * pageSize).Take(pageSize);
}
//Example
var g = (from x in choices select x).ToPageOfList(1, 20);
Да это. Необходимо было бы получить XML в надлежащий формат DataSource, и затем этот поток на форумах MSDN должен обеспечить необходимые шаги, чтобы дать Вам способность о том, как реализовать его...
Методы расширения "Взятия" и "Пропуска" предусматривают это.
myQueryable = myQueryable.Skip(10).Take(10);
var pagedData = aDataSource.Skip(20).Take(10);
Тот путь, Вы пропускаете 20 элементов и берете следующее 10