Vb.net Linq或Lambda-允许在联接表上使用自定义Orderby子句的方法

Vb.net Linq或Lambda-允许在联接表上使用自定义Orderby子句的方法,vb.net,linq,lambda,datatable,sql-order-by,Vb.net,Linq,Lambda,Datatable,Sql Order By,我有一个ASP.NET页面及其关联的处理程序类。我想限制这个处理程序中重复代码的数量。目前,我有一个方法返回一个DataTable,其中包含来自两个联接表的数据 Public Shared Function GetAllRecords() As DataTable Dim dt As New DataTable Try Using context As New QREntities() Dim record

我有一个ASP.NET页面及其关联的处理程序类。我想限制这个处理程序中重复代码的数量。目前,我有一个方法返回一个DataTable,其中包含来自两个联接表的数据

Public Shared Function GetAllRecords() As DataTable Dim dt As New DataTable Try Using context As New QREntities() Dim records = (From record In context.QRRecords Join advert In context.QRAdvertisements On record.adId Equals advert.adId Select record.recId, record.hitDate, record.hitLocation, record.ipAddress, advert.adRedirectUrl, advert.adType, advert.adData Order By hitDate Descending).ToList() 'Set the column headers and their accepted data types dt = SetDataTableColumns() For Each r In records dt.Rows.Add(r.recId, r.hitDate, r.hitLocation, r.ipAddress, r.adRedirectUrl, r.adType, r.adData) Next End Using Catch ex As Exception Return Nothing End Try Return dt End Function 作为DataTable的公共共享函数GetAllRecords() Dim dt作为新数据表 尝试 将上下文用作新实体() Dim记录=(来自context.QRRecords中的记录 在上下文中加入广告。QR记录上的广告。adId等于ADAD.adId 选择record.recId、record.hitDate、record.hitLocation、record.ipAddress、advert.adRedirectUrl、advert.adType、advert.adData 按命中日期排序。ToList() '设置列标题及其接受的数据类型 dt=SetDataTableColumns() 对于记录中的每个r dt.Rows.Add(r.recId、r.hitDate、r.hitLocation、r.ipAddress、r.adRedirectUrl、r.adType、r.adData) 下一个 终端使用 特例 一无所获 结束尝试 返回dt 端函数 现在,我想允许个人按照他们选择的任何列进行排序。我曾考虑将一个值作为参数传递,然后在select语句中进行检查,然后将关联的列与Order By一起使用,但问题是,Dim记录是一个匿名类型的列表,这意味着我无法在我知道的情况下预先声明它。我的问题是,对每个人来说,实现这一目标的最佳方式是什么

我研究过查询对象、自定义表达式和查询集,但它们似乎把我引入歧途


提前谢谢

动态Linq库OrderBy函数允许对列和方向进行动态排序。

动态Linq库OrderBy函数允许对列和方向进行动态排序。

尝试查看动态Linq库,我相信有一个OrderBy函数,它接受一个字符串,该字符串将包含要排序的列和目录!哇,我觉得自己像个傻瓜。非常感谢!:)而且。很高兴它起到了作用,继续把它作为答案发布,这样你的问题就不会被列为未回答。试着看看动态Linq库,我相信有一个OrderBy函数,它接受一个字符串,该字符串将包含要排序的列和目录。天哪,你说得对!哇,我觉得自己像个傻瓜。非常感谢!:)而且,很高兴它有帮助,继续把它作为答案发布,这样你的问题就不会被列为未回答的问题。