小编Dav*_*ave的帖子

动态构建Linq Lambda表达式

好吧,我的猜测已经在某个地方得到了解答,而我对语法还不太熟悉,还没理解,所以请耐心等待.

我的网络应用程序的用户需要过滤网格视图中的一长串项目,通过linqdatasource访问.我正在使用OnSelecting事件来进一步过滤项目.我想根据用户在DropDownLists中所做的选择来过滤这些项目.

例如,他们选择"标题""包含""弗雷德"这导致

e.Result = dbContext.Opps.Where(opp => opp.Title.Contains("Fred"));
Run Code Online (Sandbox Code Playgroud)

或"描述""不包含""Alpha"导致

 e.Result = dbContext.Opps.Where(opp => !opp.Description.Contains("Alpha"));
Run Code Online (Sandbox Code Playgroud)

我想动态地构建Expression(System.Linq.Expressions.Expression>),而不是使用嵌套的switch表达式来生成它,因为我想要检查多个字段,而且我还想使用StartsWith和EndsWith检查.如果我可以将Expression构建为字符串,就像这样:

string stringExpression = string.Format("opp => opp.{0}.{1}(\"{2}\")",
    ddlCustomFilter.SelectedValue,
    ddlFilterType.SelectedValue,
    txtFilterText.Text);
Run Code Online (Sandbox Code Playgroud)

然后以某种方式将它转换为表达式......这可能吗?或者我应该咬紧牙关并生成创建各种表达式所需的所有switch()语句?

c# lambda

11
推荐指数
2
解决办法
3万
查看次数

asp.net MVC模型如何生成输入名称?

在使用Razor标记的MVC中的EditorFor视图中,如果执行此操作:

@Html.TextBox("")
Run Code Online (Sandbox Code Playgroud)

HTML提供了模型的正确输入名称,如下所示:

<input id="usr_Roles" name="usr.Roles" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

"usr.Roles"名称来自此EditorFor行:

@Html.EditorFor(modelItem => usr.Roles, "RoleList") 
Run Code Online (Sandbox Code Playgroud)

不幸的是,我正在尝试生成一组名为"usr.Roles"的复选框.由于MVC呈现复选框的方式,我不能使用Html.Checkbox.我可以像这样手动生成它们:

@foreach (string roleName in Roles.GetAllRoles())
{
    string checkboxId = "checkbox_" + roleName;
    <input type="checkbox" name="usr.Roles" id="@checkboxId" value="@roleName" @Html.Raw(Model.Contains(roleName) ? "checked" : "") />
    <label for="@checkboxId">@roleName</label>
} 
Run Code Online (Sandbox Code Playgroud)

上面的工作,但只是因为我手动指定"usr.Roles"作为复选框名称.

我的问题是:在对象和属性的迷宫中,@ Html.TextBox对象在哪里找到"usr.Roles""usr-Roles"字符串?我可以自己找到并在复选框中使用它吗?

razor asp.net-mvc-3

2
推荐指数
1
解决办法
5973
查看次数

标签 统计

asp.net-mvc-3 ×1

c# ×1

lambda ×1

razor ×1