如何过滤MVC SelectList以删除不需要的值

时间:2014-07-01 06:47:16

标签: c# .net

我有一个SelectList,我需要在Text值为emptyOrNull时过滤掉?我努力让这个工作。有任何想法吗?我试过这个

示例代码

// My list - this is valid code
SelectList list = model.MySelectList;  

// But when I try this I get the following error message?
SelectList test = list.Where(x => x.Text != "");  

我收到以下编译器错误消息

错误

Error convert source .. IEnumerable<SelectListItem> to target type SelectList

更新 - 我需要过滤掉值,即我需要类似

foreach (var item in list)
{
    if (string.IsNullOrEmpty(item.Text))
    {
        // remove item from list
    }
}

// Then list does not include any items with a Value which is null or empty

更新

进行以下更改后,代码会编译,但我得到的是Select.Web.Mvc.SelectListItem&#39;在渲染的下拉列表中。

new SelectList(list.Where(x => x.Text != ""));

请指教,非常感谢,

4 个答案:

答案 0 :(得分:0)

你可以用两种方式做,

(i)中。使用LINQ

仅获取非空或非空的值
List<SelectListItem> test = list.Where(item => item.Text != null || !(item.Text.Equals(string.Empty))).ToList();

(ii)。第二种方法是找到值并从原始

中删除
List<SelectListItem> filedNullOrEmpty = list.Where(item => item.Text == null ||     item.Text.Equals(string.Empty)).ToList();
  foreach (Select selobj in filedNullOrEmpty)
  {
   list.Remove(selobj);
  }       

答案 1 :(得分:0)

Enumerable.Where返回IEnumerable<T>,而不是SelectList - 尝试使用此constructor

SelectList test = new SelectList(list.Where(x => !String.IsNullOrEmpty(x.Text)));  

答案 2 :(得分:0)

这是因为.Where()返回IEnumerable。您应该转换为SeletList类型。

其中一个选项是.Where(x => x.Text != "").Select(new SelectListItem(){Text = x.Text, Value = x.Value});

答案 3 :(得分:0)

SelectList构造函数采用IEnumerable,所以你需要做的就是将LINQ查询传递给构造函数,如此

  var query = from c in source
              where c.Key != ""
              select c;

 var customerList = new SelectList(query, "DataTextField", "DataValueField");

希望我能帮助你。