Фильтр Gridview и сортировка с использованием LINQ - PullRequest
1 голос
/ 21 сентября 2010

Я обновляю проект до .net 4. Мои GridView используют DataSets и реализуют фильтрацию, сортировку и разбиение на страницы с использованием ObjectDataSource.

Как лучше всего подключать GridView к запросу Linq иреализовать сортировку, фильтрацию и разбиение на страницы?

Я все еще использую DataSet и ObjectDataSource или есть способ использовать другой тип DataSource, который позволяет мне напрямую подключаться к результату запроса LINQ, который обрабатывает фильтрацию, сортировку и пейджинг для меня?

Редактировать:

Между пользовательским интерфейсом и DatabaseContext есть busineseslogic, поэтому подключение напрямую к моему ORM не вариант.Он должен соответствовать результату запроса LINQ (IQueryable).Я использую отдельные функции вставки / обновления / удаления для обработки бизнес-логики, прежде чем говорить с ORM.

1 Ответ

1 голос
/ 27 июля 2011

Что вы можете сделать, так это сохранить ваш ObjectDataSource (ODS), но использовать логику, которую вы используете для извлечения данных, и поместить их в класс, который использует Linq (или любую другую технологию доступа к данным) для извлечения данных для вас.

Для этого в ObjectDataSource вы указываете имя класса, который будет выполнять работу за вас, например,

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
                          TypeName="CustomDAL" 
                          SelectMethod="GetData"/>

. Это заставит ODS создать экземпляр класса CustomDALи вызовите метод GetData.

Поддерживаются также сортировка и разбиение по страницам, но, вероятно, лучше всего реализовать реальную логику самостоятельно в отношении ограничения извлекаемых данных.

Чтобы включить подкачкудобавьте EnablePaging="True" к объявлению ODS, а в свой SelectMethod добавьте StartRowIndex и PageSize для их обработки в linq с помощью методов Skip и Take, чтобы получить нужные записи, например

var results= (from user in context.users 
          where user.UserId == userId
          select user).Skip(StartRowIndex).Take(PageSize).ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...