2011-02-10 22 views
1

我有一個下拉列表設置爲自動回發,它需要返回的產品列表以指定的順序。我以爲我可以把它放在它自己的方法中,並使用一個參數來指定orderby,但我無法讓它工作。如何更改orderby回發LINQ到SQL查詢

下面是一個例子:

protected void Show_Products(int item) 
    { 
     using (storeDataContext db = new storeDataContext()) 
     { 
      string query = ""; 
      switch (item) 
      { 
       case 1: 
        query ="x.Name"; 
        break; 
       case 2: 
        query = "x.MSRP"; 
        break; 
       default: 
        break; 
      } 
      var q = db.Items.OrderBy(x=> query).Select(x => x); 
      foreach(var n in q) 
      { 
       Do work 
      } 
      } 
     } 

而且下拉列表方法被調用回發:

protected void ddlSortBy_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int value =int.Parse(ddlSortBy.SelectedValue); 
     Show_Products(value); 
    } 
+2

如何發佈你試過的東西沒有用?目前還不清楚你想要做什麼。 –

+0

用戶單擊下拉菜單,選擇價格並且上面的查詢動態更改。將x.MSRP放在一個字符串中並傳遞該變量來代替x.Name不起作用。 –

+1

在這種情況下,[動態LINQ OrderBy](http://stackoverflow.com/questions/41244/dynamic-linq-orderby) –

回答

1
var q = from p in db.Items 
     select q; 

switch(item) 
{ 
    case 1: 
     q.OrderBy(x=> x.Name); 
     break; 
    case 2: 
     q.OrderBy(x=> x.MSRP); 
     break; 
    default: 
     break; 

} 

foreach(var n in q) 
{ 
    // Do work 
} 
+0

這很有趣,我沒有考慮這樣做。 –

0

很抱歉,但你正在試圖做的是使用文字"x.Name""x.MSRP"訪問方法..你不這樣做,除非你使用反射來獲取方法和屬性。

1

我看了一本關於鏈接的代碼書,知道有辦法做到這一點。低和看我是對的。

protected void Show_Products(int item) 
{ 
    using (storeDataContext db = new storeDataContext()) 
    { 
     var q = db.Items.OrderBy(x=> x.Name).Select(x => x); 
     switch (item) 
     { 
      case 1: 
       var q = db.Items.OrderBy(x=> x.Name).Select(x => x); 
       break; 
      case 2: 
       q = db.Items.OrderBy(x => x.MSRP).Select(x => x); 
       break; 
      default: 
       break; 
     } 

     foreach(var n in q) 
     { 
      Do work 
     } 
     } 
    } 

我最初設置VAR●要用於初始化的查詢,但不要緊,因爲這種方法將傳遞一個參數,它會改變它。

它可能不是最優雅的方式,但只有少數選擇,我認爲它是可行的。

+0

的副本,你可以去'var q = db.Items;'然後在Switch q中= q.OrderBy(x ...' – PostMan