我正在尝试为SelectList编写简单的扩展方法。 API让我困惑。
public static SelectList Without(this SelectList selectList,int val){
//return new SelectList(selectList.Items.Where(x=>x.Value!=val)); <-----???
}
它应该返回具有相同项目的新选择列表,其中一个值与参数val
匹配。
答案 0 :(得分:1)
这很有效。可能有点慢,但我不在乎:
public static class SelectListExtensions{
public static SelectList Without
(this SelectList selectList, params int[] what){
var items=selectList.Items.Cast<dynamic>()
.Where(x=>!what.Any(z=>x.Value==z));
return new SelectList(items);
}
public static SelectList Without<T>
(this SelectList selectList,params T[] what) where T:Enumeration{
var items=selectList.Items.Cast<dynamic>()
.Where(x=>!what.Any(z=>x.Value==z.Value));
return new SelectList(items);
}
}
欢迎更好的方法。
不。这不起作用。呈现的Html:
<select data-val="true" data-val-required="The JMC decision field is required."
id="JMCDecisionStatus" name="JMCDecisionStatus">
<option>{ Name = Successful, Value = 2 }</option>
<option>{ Name = Reserved, Value = 3 }</option>
<option>{ Name = Rejected, Value = 4 }</option>
</select>
不完全是我想要的。 :d
答案 1 :(得分:0)
您是否只需要将ToArray()应用于IEnumerable集合?
return new SelectList(selectList.Items.Where(x=>x.Value!=val).ToArray());
答案 2 :(得分:0)
return new SelectList(selectList.Items.Cast<T>().Except(what));