2011-02-10 10 views
1

私は指定された順序で製品のリストを返す必要がある自動ポストバックに設定されたドロップダウンリストを持っています。私はちょうどその独自のメソッドにそのクエリを配置し、orderbyを指定するパラメータを使用することができると思ったが、私はそれを動作させることはできません。LINQ to SQLクエリのポストバックでorderbyを変更する方法

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

、[Dynamic 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" .. Reflectionを使用してメソッドとプロパティを取得していない限り、あなたはそれをしません。

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 qを設定するが、この方法は、それを変更しますパラメータが渡されますので、それは問題ではありません。

これは最もエレガントな方法ではないかもしれませんが、ほんのわずかのオプションのために実行可能だと思います。

+0

の複製では、 'var q = db.Items;'に行くことができます。 = q.OrderBy(x ... ' – PostMan

関連する問題