我有两张桌子,
Order (ID, Value)
Run Code Online (Sandbox Code Playgroud)
和
OrderType (ID, Name [Quote, Sale, Purchase, etc])
Run Code Online (Sandbox Code Playgroud)
我想获得每种类型(计数)的订单总数以及每种类型的订单总数(总和)
我可以单独使用这些
Order.group(:order_type).count(:id)
Run Code Online (Sandbox Code Playgroud)
和
Order.group(:order_type).sum(:value)
Run Code Online (Sandbox Code Playgroud)
我想在一个查询中执行这些,相当于以下SQL
SELECT
order_types.id, Count(*) as total_count, Sum(orders.value) As total_value
FROM
order
JOIN
order_types ON orders.order_type_id = order_types.ID
GROUP BY
order_types.id
Run Code Online (Sandbox Code Playgroud)
查询还应返回完整OrderType对象,以便在视图中显示名称
我需要一种方法来根据我的MVC应用程序中的用户属性,在生成URL时以编程方式选择选择哪个RoutePrefix
我有一个MVC 4应用程序(使用AttributeRouting NuGet包)
由于托管环境的要求,我必须为我的许多操作设置两条路由,以便托管环境可以具有不同的访问权限.
我通过装饰我的控制器来解决这个问题[RoutePrefix("full")] [RoutePrefix("lite)].允许通过/ full/{action}和/ lite/{action}访问每个操作方法.
这非常有效.
[RoutePrefix("full")]
[RoutePrefix("lite")]
public class ResultsController : BaseController
{
// Can be accessed via /full/results/your-results and /lite/results/your-results and
[Route("results/your-results")]
public async Task<ActionResult> All()
{
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每个用户只应在其URL中使用full或lite,这取决于该用户的某些属性.
显然,当我使用RedirectToAction()或@Html.ActionLink()它只会选择第一个可用的路线,并不会保留"正确"的前缀.
我想我可以覆盖该RedirectToAction()方法以及添加我自己的@Html.ActionLink()方法版本.
这将有效,但它将涉及一些讨厌的代码,我生成URL,因为我得到的是一个表示动作和控制器的字符串,但不是反映的类型.也可能有路由属性,例如在我的示例中,所以我将不得不复制许多内置代码的MVC.
对于我想解决的问题,有没有更好的解决方案?