2013-01-15 45 views
3

是linq中的新手..我堅持使用一種場景。即,如何在order by子句中使用動態變量

我必須根據用戶輸入對搜索結果進行排序。

用戶輸入是姓氏,名字和標題。對於輸入3下拉列表,我必須根據所選值對結果進行排序。

我試圖

order = Request["orders"].Split(','); 

       var param = order[0]; 
       var p1 = typeof(Test).GetProperty(param); 
       param = order[1]; 
       var p2 = typeof(Test).GetProperty(param); 
       param = order[2]; 
       var p3 = typeof(Test).GetProperty(param); 


model.Test = (from tests in model.Test 
        select tests). 
      OrderBy(x => p1.GetValue(x, null)). 
      ThenBy(x => p2.GetValue(x, null)). 
      ThenBy(x => p3.GetValue(x, null)); 

但它沒有工作。

我想QRY等預先這個

from tests in model.Test 
select tests).OrderBy(x => x.lastname). 
ThenBy(x => x.firstname).ThenBy(x => x.Title); 

order[0]== lastname but how can i use it in the place of OrderBy(x => x.order[0])..? 

感謝。

+0

[Linq Order by when name name is dynamic and as a string as a string to a function]可能重複(http://stackoverflow.com/questions/8398453/linq-order-by-when-column-name-is-dynamic作爲一個字符串到函數) –

回答

3

我解決了我的情況下,如下所示,以用於排序

List<string>order = Request["orders"].Split(',').ToList(); 

//映射柱串屬性

var mapp = new Dictionary<string, Func<Test, string>> 
      { 
       {"FirstName", x => x.FirstName}, 
       {"LastName", x => x.LastName}, 
       {"SimpleTitle", x => x.SimpleTitle} 

      }; 

//用戶輸入的順序

列 //列表
var paras = new List<Func<Test, string>>(); 
      foreach (var para in order) 
      { 
       if(!string.IsNullOrEmpty(para)) 
       paras.Add(mapp[para]); 
      } 

//sorting 
      model.Test= model.Test.OrderBy(paras[0]).ThenBy(paras[1]).ThenBy(paras[2]); 

謝謝大家,

1

其實你正在尋找動態的LINQ查詢比你可以嘗試Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)

允許做這樣

enter image description here

它意味着你可以動態地傳遞字符串PROPERTYNAME短你收集orderby功能

您還可以閱讀關於:Dynamic query with Linq

+0

當我嘗試 string a = order [0]; var reslt =(來自model.TestFlatDatas中的測試 選擇測試).OrderBy(a); OrderBy將錯誤顯示爲「IOrderedEnumerable方法的類型參數 System.Linq.OrderBy (這個Ienumumerable ,Func )'不能從用法推斷。 。 –

+1

@ AnishKarunakaran-你可以通過從msdn或者scott gu文章鏈接中下載它來引用動態linq庫。如果不是下載庫,並且比你的項目中的refrece比嘗試在這裏給出的例子.. –

+0

很抱歉,我ddn't找不到這樣一個..我添加了Nuget system.Linq.Dynamic ..但沒有區別。 請你指定下載鏈接。 –