繁体   English   中英

使用LINQ2SQL与多个表进行GridView排序

[英]GridView Sort using LINQ2SQL with multiple tables

我正在尝试使用具有多个表的LINQ2SQL对GridView进行排序。 由于网格中的列包含来自多个表的数据,我如何告诉LINQ排序哪个列名。

例如,用户点击了第一列( POCNum ),其是表p所以我会使用p.POCNumorderby 问题是e.SortExpressio n仅包含单词POCNum 无法将其链接回表p 因此,如果有人单击表c Contact_ID列,则需要按LINQ查询中的orderby c.Contact_ID

任何建议,将不胜感激。

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();
}

我要查看的是表达式或动态linq。

如果您在http://www.singingeels.com/Articles/Self_Sorting_GridView_with_LINQ_Expression_Trees.aspx上看到了通用排序器,或者在http://devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting中找到了帮助。

有关动态linq的信息,请参阅是否存在使用Linq动态创建过滤器的模式? 这与过滤器有关,但订购时也是如此。 请注意,您的匿名类型没有重复的列名,因此多表源无关紧要

遵循通用排序器中的示例,在GridView的Sorting处理程序中(显式实现,不是您的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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM