目標。
コントローラーから渡されたパラメーターに応じて、MySQL から提供された結果を並べ替えます。
シナリオ。
アプリケーションにはいくつかのコントローラーがあり、そのうちのいくつかはデータベースからユーザー データを取得します。
アクセスすると、 でソートされた~/Products/Compare?Id=1&OrderBy=lowestPriceToBiggestid との製品の比較を表示したい。1lowestPriceToBiggest
要約すると、 URL によって渡されたORDER BYパラメーターの値に従って、プロシージャーを動作させたいと考えています。OrderBy
スポットライト。
私ProductsControllerは:
public ActionResult Products(Nullable<int> id, string orderBy)
{
List<Products> productsList = Build.ProductsList(id, orderBy);
return View(productsList);
}
私のクエリは次のとおりです。
Select product.Name As productName
From app_products As product
Where product.Id = 1
Order By product.Price Asc
ご覧のとおり、これまで、C# のコードと SQL のコードの間で、製品のリストを並べ替えるための通信は行われませんでした。私は今立ち往生しています。biggestPriceToLowestパラメータによって提供されるようなものをSQLコードに変換するにはどうすればよいですか? つまり、orderByパラメーターは私biggestPriceToLowestを返し、それをに変換する必要があります
[...]
Order By product.Price Desc
が見えますDescか?biggestPriceToLowestURL によって提供される文字列を に変換しDescて、パラメータとしてプロシージャに送信するにはどうすればよいですか?
強調するだけです:操作なしorderByで、コントローラーのパラメーターはbiggestPriceToLowest(string) またはlowestPriceToBiggest(string) をまたはそれぞれBuild.ProductsList()変換する必要がありDescAsc
私がすでに考えたこと。
各文字列を SQL コードに変換する を作成することを考えましたswitchが、それが良い方法なのか、それとも私が行っていることが正しい/最善の方法なのかはわかりません。
結局のところ、質問は何ですか?
私のシナリオに基づいて、何を作成する必要がありますか? スイッチ?私が知識を持っていないいくつかのトリックはありますか?
技術的な詳細。
C# + MVC 4 + Asp.Net + Razor Engine + MySQL を使用しています。