1

目标。

根据控制器传递的参数对 MySQL 提供的结果进行排序。

情景。

我的应用程序上有一些控制器,其中一些控制器将数据库中的用户数据带入用户。

当我访问时,~/Products/Compare?Id=1&OrderBy=lowestPriceToBiggest我想显示产品与 id1排序的比较lowestPriceToBiggest

总而言之,我想让我的程序的行为根据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) toBuild.ProductsList(),但我需要将这些字符串DescorAsc

我已经想到了什么。

我想switch将每个字符串转换为 SQL 代码——但我不知道这是否是一种好的做法,或者我正在做的事情是否是正确/最佳的方法。

最终,问题是什么?

根据我的情况,我必须做什么?一个开关?存在一些我不知道的技巧吗?

技术细节。

我正在使用 C# + MVC 4 + Asp.Net + Razor Engine + MySQL。

4

2 回答 2

2

In your Action I would do something like this and add the case statements as required

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

You could use ODATA to make the query: http://msdn.microsoft.com/pt-br/magazine/jj658971.aspx http://www.codeproject.com/Articles/393623/OData-Services

you will make a call to a URL rest and get the result

于 2013-07-26T13:37:02.220 回答