1

目標。

コントローラーから渡されたパラメーターに応じて、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 を使用しています。

4

2 に答える 2

2

あなたのアクションでは、このようなことを行い、必要に応じてケースステートメントを追加します

switch(orderBy) 
{ 
     case "priceASC": return productsList.OrderBy(x =>x.Price); 
     default: return productList 
}
于 2013-07-26T13:37:57.817 に答える
0

ODATA を使用してクエリを作成できます: http://msdn.microsoft.com/pt-br/magazine/jj658971.aspx http://www.codeproject.com/Articles/393623/OData-Services

URLレストを呼び出して結果を取得します

于 2013-07-26T13:37:02.220 に答える