2012-03-08 4 views
0

Я пытаюсь сортировать GridView с использованием LINQ2SQL с несколькими таблицами. Поскольку столбцы в сетке содержат данные из нескольких таблиц, как мне сообщить LINQ, какое имя столбца сортировать.GridView Сортировать по LINQ2SQL с несколькими таблицами

Например, пользователь нажимает на первую колонку (POCNum), которая находится в таблице p, поэтому я бы использовал p.POCNum до orderby. Задача e.SortExpressio n содержит только слово POCNum. Невозможно связать это с таблицей p. Поэтому, если кто-то нажимает на столбец Contact_ID, который находится в таблице c Мне нужно orderby c.Contact_ID в запросе LINQ.

Любые предложения будут оценены.

protected void GridView1_Sort(Object sender, GridViewSortEventArgs e) 
{ 
    DataClasses1DataContext db = new DataClasses1DataContext(); 
    var results = (from p in db.POCs<BR/> 
        join c in db.Contacts on p.POC_ID equals c.POC_ID 
        join a in db.Auxilaries on p.POC_ID equals a.POC_ID 
        join l in db.Legends on p.Basis equals l.Legend_code_value 
        orderby e.SortExpression // problem - 
        //e.SortExpression does not contain table reference   
        where p.DebtorObj_ID == Convert.ToInt32(ddlDebtor.SelectedItem.Value) 
        select new { p.POC_ID, p.POC_Date, p.POCNum, p.Total_Amt, p.Secure_Amt, 
           a.AMailing_Name1, l.Legend_Description }).ToList(); 
      GridView1.DataSource = results; 
      GridView1.DataBind(); 
} 
+1

Почему бы не связать GridView с данными один раз и разрешить сортировку GridView, например, используя метод Sort с выражением? – kaj

+2

Asp.net? Winforms? Wpf? – kaj

+0

Я использую ASP.NET. Если бы вы могли привести пример метода сортировки с выражением, которое было бы здорово. Я не могу заставить его работать из-за разных столбцов из нескольких таблиц. – user1257206

ответ

1

То, что я буду рассматривать, это выражения или динамический linq.

Если вы видите Generic Sorter по адресу http://www.singingeels.com/Articles/Self_Sorting_GridView_with_LINQ_Expression_Trees.aspx или заходите в http://devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting, который должен помочь.

Для динамического linq см. Is there a pattern using Linq to dynamically create a filter?, который касается фильтров, но то же самое относится и к заказу. Обратите внимание, что ваш анонимный тип не имеет повторяющихся имен столбцов, поэтому источник нескольких таблиц не должен иметь значения.

Следуя примеру универсального сортировщика в обработчике сортировки для GridView (явная реализация, а не ваш запрос LINQ, не должно иметь значения):

IEnumerable<CustomerOrder> customerOrders = (LINQ statement) 
var param = Expression.Parameter = typeof(CustomerOrder)); 
var sortExpression = Expression.Lambda<Func<CustomerOrder, object>>(Expression.Convert(Expression.Property(param,e.SortExpression), typeof(object), param); 

MyGridView.DataSource = customerOrders.AsQueryable().OrderBy(sortExpression); 
MyGridView.DataBind(); 
+0

KAJ, спасибо за вашу помощь. Я собираюсь попробовать общий сортировщик от devtoolsshed. Похоже, он должен работать. – user1257206

+0

Я добавил пример, выполнив его сам на основе ссылок, цитируемых – kaj

+0

Спасибо за этот код – user1257206

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