2013-07-17 49 views
1

我有一個對象Ob與幾個字段f1,..,fn(不同類型)。 現在一個對象列表顯示在GridView中,我需要實現排序方法。Linq按字段在vb.net中動態檢索

真正的問題是: 我怎樣才能運行

(from ob in Ob_list orderby ob.f1 ascending) 

當排序字段由一個字符串(即「F1」)表示? 不幸的是,我不能夠得到它與反射(我不能做像ob.GetType()。GetField(「f1」),這不是映射到SQL代碼)。

我有幾個領域可能排序行,這是最好的&最快的方法呢?

非常感謝!

回答

0

LINQ執行被推遲到您實際枚舉結果或訪問「計數」等。正因爲如此,您可以分階段構建LINQ語句。

下面的代碼是用C#完成的,但我相信在VB.NET中可以做到這一點。

首先設置您的基本查詢:

var query = (from ob in Ob_list); 

在這一點上,沒有什麼實際上已經到數據庫中,由於延遲執行。

接下來,有條件通過添加組件訂單:

if (sortField == "f1") 
{ 
    query = query.OrderBy(o => o.f1); 
} 
else if (sortField == "f2") 
{ 
    query = query.OrderBy(o => o.f2); 
} 
else 
{ 
    //... 
} 

最後,收集您的結果

foreach (var item in query) 
{ 
    // Process the item 
} 
+0

好,但主要問題是排序鍵的數量(現在10,可能高達25),並且對於他們每個人我都應該考慮ASC或DESC。這意味着在最糟糕的情況下有50種選擇,這就是爲什麼我想要做一些「神奇」的東西或使用反射。 – Desmond