如何向LINQ查询得到的SelectListItem列表中添加手动项‘All’
如何向SelectListItem列表添加'All'项?
我有如下列表生成代码:
var listOfParks = (from s in DB.MasterDatas select new SelectListItem { Text = s.service_under, }) .Distinct() .Union( from t in DB.MasterDatas join f in DB.Users1 on t.pv_person_resp_id equals f.user_id select new SelectListItem { Text = f.user_name }) .ToList();但我需要手动向该列表中添加‘All’项,目前尝试的代码没写完,请问该如何正确实现这个需求?
这有几种简单且实用的实现方式,你可以根据自己的习惯选择:
方法1:先生成原有列表,再插入'All'到首位
这种方式最直观,先完成你原本的查询并转成List,再用Insert方法把'All'项放在最前面:
// 先获取原有查询的结果列表 var listOfParks = (from s in DB.MasterDatas select new SelectListItem { Text = s.service_under, }) .Distinct() .Union( from t in DB.MasterDatas join f in DB.Users1 on t.pv_person_resp_id equals f.user_id select new SelectListItem { Text = f.user_name }) .ToList(); // 添加'All'项到列表开头,Value可根据业务需求设置 listOfParks.Insert(0, new SelectListItem { Text = "All", Value = "" });
方法2:用LINQ的Concat直接拼接'All'项
如果你想在LINQ链式调用里一步完成,可以先创建一个包含'All'项的单元素集合,再和原查询结果拼接:
// 先定义单独的'All'项集合 var allOption = new List<SelectListItem> { new SelectListItem { Text = "All", Value = "" } }; // 拼接'All'项和原有查询结果 var listOfParks = allOption.Concat( (from s in DB.MasterDatas select new SelectListItem { Text = s.service_under, }) .Distinct() .Union( from t in DB.MasterDatas join f in DB.Users1 on t.pv_person_resp_id equals f.user_id select new SelectListItem { Text = f.user_name }) ).ToList();
小提示
- 别忘了给
SelectListItem设置Value属性,不然默认是null,在下拉框等场景使用时可能出现异常,你可以根据业务需求设为"All"或者空字符串。 - 即使原有查询结果为空,这两种方法也能正常工作,不会报错。
内容的提问来源于stack exchange,提问作者papagallo
相关产品推荐
相关产品推荐

