Здесь Вы идете.
SELECT
column1,
column2
FROM
viewWhatever
WHERE
CASE
WHEN @locationType = 'location' AND account_location = @locationID THEN 1
WHEN @locationType = 'area' AND xxx_location_area = @locationID THEN 1
WHEN @locationType = 'division' AND xxx_location_division = @locationID THEN 1
ELSE 0
END = 1
Переменные обычно имеют область видимости в представлении, хотя это может сбивать с толку теги. Думайте обо всем представлении как о едином методе, где все, что находится за пределами тегов (и сами теги), является пробелом. Переменная, определенная вне блока в представлении, будет ограничена всем представлением. Переменная, определенная внутри блока (цикл foreach / if then / using), будет привязана к этому блоку. Вы не можете повторно использовать переменную внутри блока, который ранее был определен вне блока.
Вот что я заметил в отношении MVC Scope:
Переменная, объявленная в элементе управления содержимым, ограничена только в элементе управления содержимым:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
ScopeTest
<%
string testVar1 = "This is a test.";
%>
<%=
testVar1
%>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>ScopeTest</h2>
The below reference to the testVar1 will cause a parser error, because the variable is out of scope.
<%=testVar1 %>
</asp:Content>
**На странице просмотра без MasterPage переменные, объявленные в элементе управления runat="server", доступны только в этом элементе управления. Переменные, объявленные вне элемента управления runat="server", недоступны для этого элемента управления.
В противном случае объявленные переменные доступны по всей странице.**
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<%
string strPageScope = "PageScope Variable.";
%>
<head runat="server">
[HEAD]<br />
<title>ScopeTest2</title>
<%
string strHeadScope = "Head Scope...";
%>
This WORKS:
<%=
strHeadScope %>
<br />
ViewData available everywhere:
<%=
ViewData["VDScope"].ToString()
%>
<br />
strPageScope is NOT Available BECAUSE THE RUNAT=SERVER:
<%
//Response.Write(strPageScope);
%>
<br />
[END OF HEAD]<br />
</head>
<body>
[BODY START]<br />
strHeadScope NOT AVAILABLE, BECAUSE THE HEAD HAS RUNAT="SERVER" IN IT.
<%
//Response.Write(strHeadScope);
%>
<br />
ViewData is available everywhere:
<%
Response.Write( ViewData["VDScope"].ToString());
%>
<br />
<div>
<%
string strBodyVar = "Testing Var Declared in Body.";
%>
</div>
<%
Response.Write(strBodyVar);
%>
<br />
Page Scope works:
<%=
strPageScope
%>
<br />
[END BODY]
</body>
</html>
Код контроллера, в случае любопытства:
public ActionResult ScopeTest() { вернуть View(); }
public ActionResult ScopeTest2()
{
ViewData["VDScope"] = "ViewDataScope";
return View();
}