2010-09-21 5 views
1

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

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

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

Edit:

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

ответ

1

Что вы можете сделать, это сохранить свой объект 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() 
+0

Спасибо, но большое преимущество было бы не иметь (для создания) функции для каждого объекта objectdatasource. Скорее просто передать тип и необходимые параметры или запрос linq в 1 общий класс. – Jeroen

+0

Возможно, вам лучше создать собственный общий класс доступа к данным, а не использовать ODS и заполнить сетку с помощью ручной привязки данных – Nathan

Смежные вопросы