2017-03-31 47 views
0

我使用以下LINQ查詢生成result ORDERBY ASC或DESC在LINQ特定列:如何根據參數

var field = "FirstName"; // or "LastName" 
var type = "asc"; // or "desc" 

var result = (from x in db.ContactSet 
       select new 
       { 
        x.FirstName, 
        x.LastName 
       }).ToList(); 

我需要orderbyascdesc(基於關閉type變量),用於變量field

我怎樣才能以乾淨的方式做到這一點?

編輯:重複引用的問題沒有回答這個問題。

+0

[動態LINQ的OrderBy上的IEnumerable ](可能的重複http://stackoverflow.com/questions/41244/ dynamic-linq-order by-ienumerablet) – ASh

+0

如果您在編譯時知道字段名,爲什麼要將排序列名指定爲動態? –

+0

我只是在運行時才知道它們,我只是爲了簡化問題而放在那裏。 –

回答

3

使用Dynamic Linq

然後,你可以寫這樣的事情...

var field = "FirstName"; // or "LastName" 
var type = "ascending"; // or "descending" <-- full 

var result = (from x in db.ContactSet 
      select new 
      { 
       x.FirstName, 
       x.LastName 
      }).ToList(); 

result = result.OrderBy(field + " " + type).ToList(); 
+0

無法根據用法推斷方法(IEnumerable ,Func )的類型參數。嘗試明確指定類型參數。 –

+1

@BarryMichaelDoyle答案要求[動態Linq](https://dynamiclinq.codeplex.com/)_(就像他解釋的)_ –

+0

我必須快速出發,所以我只能在兩次再回來時檢查出來小時。沒意識到我需要一個包。感謝澄清。 –