Ker*_*len 6 html-select controller operators asp.net-mvc-3
我的模块中有两个下拉列表.
在一个下拉列表中,我已经硬编码了所有运算符 <,>,<=,>=,==
在第二个下拉列表中,我有像员工一样的硬编码员工 1000,2000,3000,4000....50000
现在,如果我<从一个列表和2000第二个列表中选择并单击"提交"按钮,我应该获得薪水低于2000的员工列表.
我想在asp.net mvc3中这样做
我怎样才能完成这项任务?我需要为此编写存储过程吗?
我创建了下拉列表,如:
viewModel.OperatorsList = new[]
{
new SelectListItem { Value = "<", Text = "<" },
new SelectListItem { Value = ">", Text = ">" },
new SelectListItem { Value = "<=", Text = "<=" },
new SelectListItem { Value = ">=", Text = ">=" },
new SelectListItem { Value = "==", Text = "==" }
};
viewModel.SalaryList = new[]
{
new SelectListItem { Value = "1000", Text = "1000" },
new SelectListItem { Value = "2000", Text = "2000" },
new SelectListItem { Value = "3000", Text = "3000" },
// and so on
};
Run Code Online (Sandbox Code Playgroud)
我用它来显示视图中的下拉列表:
<%: Html.DropDownListFor(x => x.Operators, Model.OperatorsList)%>
Run Code Online (Sandbox Code Playgroud)
好吧,你可以做那样的事情
假设viewModel是......你的viewModel,你Employee有一个有财产的实体Salary(int在这个样本中,它可能是decimal在现实世界中)
创建一个静态助手类
public static class MyHelper
{
// a dictionary for your operators and corresponding ExpressionType
public static Dictionary<string, ExpressionType> ExpressionTypeDictionary = new Dictionary<string, ExpressionType>
{
{"<", ExpressionType.LessThan},
{">", ExpressionType.GreaterThan},
{">=", ExpressionType.GreaterThanOrEqual}
//etc
};
//a method to filter your queryable
public static IQueryable<Employee> FilterSalary(this IQueryable<Employee> queryable, int salary, string operatorType)
{
//left part of the expression : m
var parameter = Expression.Parameter(typeof(Employee), "m");
//body is the right part of the expression : m
Expression body = parameter;
//m.Salary
body = Expression.Property(body, "Salary");
//m.Salary <= 1000 (for example)
body = Expression.MakeBinary(ExpressionTypeDictionary[operatorType], body, Expression.Constant(salary));
//m => m.Salary <=1000
var lambda = Expression.Lambda<Func<Employee, bool>>(body, new[] { parameter });
//so it will be queryable.Where(m => m.Salary <= 1000)
return queryable.Where(lambda);
}
}
Run Code Online (Sandbox Code Playgroud)
用法
var queryable = context.All<Employee>();//or something like that, returning an IQueryable<Employee>
queryable = queryable.FilterSalary(viewModel.Salary, viewModel.Operators);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |