Новичок вопрос о LINQ: возможна подкачка страниц в запросах LINQ?

14
задан Andry 25 June 2011 в 16:46
поделиться

7 ответов

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);
20
ответ дан 1 December 2019 в 08:20
поделиться

Смотрите к 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);
}
3
ответ дан 1 December 2019 в 08:20
поделиться

Абсолютно - 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"));
}
3
ответ дан 1 December 2019 в 08:20
поделиться

У 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);
3
ответ дан 1 December 2019 в 08:20
поделиться

Да это. Необходимо было бы получить XML в надлежащий формат DataSource, и затем этот поток на форумах MSDN должен обеспечить необходимые шаги, чтобы дать Вам способность о том, как реализовать его...

MSDN - LINQ с разбиением на страницы

1
ответ дан 1 December 2019 в 08:20
поделиться

Методы расширения "Взятия" и "Пропуска" предусматривают это.

myQueryable = myQueryable.Skip(10).Take(10);
1
ответ дан 1 December 2019 в 08:20
поделиться
var pagedData = aDataSource.Skip(20).Take(10);

Тот путь, Вы пропускаете 20 элементов и берете следующее 10

2
ответ дан 1 December 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: