2012-09-05 51 views
2

我有一個ASP.NET頁面並且它與Handler類相關聯。我想限制這個處理程序中重複代碼的數量。目前,我有一個方法返回一個包含來自兩個連接表的數據的DataTable。Linq或Lambda - 允許在已連接表上定製Orderby子句的方法

 
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 

現在我想允許個人按他們選擇的任何列排序。我正在考慮傳遞一個值作爲參數,然後在select語句中檢查,然後將相關列與Order By一起使用,但與此相關的問題是Dim記錄是匿名類型的列表,這意味着我無法在我知道的情況下在手前宣佈。我的問題是每個人,最好的辦法是什麼來完成這件事?

我查看了查詢對象,自定義表達式和查詢集,但他們似乎引導我誤入歧途。

在此先感謝!

+0

試着看看動態Linq庫,我相信有一個OrderBy函數需要一個字符串,它將包含要排序的列和目錄。 – James

+0

哎呀,你是對的!哇,我覺得自己很愚蠢。非常感謝! :) –

+0

和[這一個](http://stackoverflow.com/a/233505/861716)。 –

回答

0

動態Linq庫OrderBy函數允許動態排列列和方向。