Как заставить фильтр перенаправлять к другому действию?

MySQL материализует подзапросы. Так что вы можете попробовать написать это без подзапросов:

SELECT s.student_id,
       (ABS(s.x1 - u.x1) + ABS(s.x2 - u.x2) + ABS(s.x3 - u.x3)
       ) / 3 AS avg_cate_x,
       (ABS(s.y1 - u.y1) + ABS(s.y2 - u.y2)
       ) / 2 AS avg_cate_y,
       (ABS(s.z1 - u.z1) + ABS(s.z2 - u.z2) + ABS(s.z3 - u.z3) + ABS(s.z4 - u.z4)
       ) / 4 AS avg_cate_z,
       (5 - 
        (ABS(s.x1 - u.x1) + ABS(s.x2 - u.x2) + ABS(s.x3 - u.x3)
        ) / 3 +
        (ABS(s.y1 - u.y1) + ABS(s.y2 - u.y2)
        ) / 2 +
        (ABS(s.z1 - u.z1) + ABS(s.z2 - u.z2) + ABS(s.z3 - u.z3) + ABS(s.z4 - u.z4)
        ) / 4
       ) / 3 as final_score
FROM scores s JOIN
     scores u
     ON u.student_id = 1
ORDER by final_score DESC;

Это менее элегантно, чем использование подзапроса, но вы можете увидеть улучшение производительности.

Также поможет индекс scores(student_id).

76
задан BartoszKP 13 January 2016 в 14:47
поделиться

2 ответа

RedirectToAction просто вспомогательный метод создать RedirectToRouteResult(), поэтому что Вы делаете, просто создают новое RedirectToRouteResult() проведение RouteValueDictionary() со значениями для Вашего действия.

Полная выборка на основе кода от @Domenic в комментарии ниже:

public class IsGuestAttribute: ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Ctx.User.IsGuest) 
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary 
                { 
                    { "controller", "Home" }, 
                    { "action", "Index" } 
                });
        }
    }
}
101
ответ дан BartoszKP 24 November 2019 в 11:10
поделиться

Вот пример кода:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{

    if (!Ctx.User.IsGuest)
    {
        RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
        redirectTargetDictionary.Add("action", "Index");
        redirectTargetDictionary.Add("controller", "Home");

        filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
    }
}
88
ответ дан 24 November 2019 в 11:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: