我正在尝试填充列表,因此可以将其放在ViewBag和DropDownList中。我希望它使下拉列表仅显示唯一值。 我尝试了两种方法。一个是与众不同的,没有用。那显示了所有结果并且重复了它们。在下面,我将插入代码。
List<Strategy> list = new List<Strategy>();
List<SelectListItem> groupListItems = list
.Where(w => w.Group != null)
.Select(group => new SelectListItem { Value = group.Group, Text = group.Group })
.Distinct()
.ToList();
ViewBag.Groupddl = new SelectList(groupListItems, "Value", "Text")
.Distinct();
然后我正在阅读一些帖子,人们建议我尝试使用GroupBy方法。即使只有更多唯一值,这也只会导致一个项目(第一个)填充下拉列表。
List<Strategy> list = new List<Strategy>();
List<SelectListItem> groupListItems = list
.GroupBy(w => w.Group != null)
.Select(group => new SelectListItem {
Value = group.First().Group,
Text = group.First().Group })
.ToList();
ViewBag.Groupddl = new SelectList(groupListItems, "Value", "Text")
.Distinct();
如何获取它,以便下拉列表仅填充所有唯一值而不会重复?
答案 0 :(得分:2)
可能SelectListItem
使用引用相等。因此,Distinct
对此无效。将Distinct
应用于组值本身
List<SelectListItem> groupListItems = list
.Select(w => w.Group)
.Where(g => g != null)
.Distinct()
.Select(g => new SelectListItem { Value = g, Text = g })
.ToList();
解决此问题的另一种可能性是覆盖Equals
中的GetHashCode
和SelectListItem
。
在第二个代码段中,您没有按组分组,而是按比较w.Group != null
得出的布尔值分组。
.GroupBy(w => w.Group != null)
因此,如果它们都不都是空的,则只能通过Key = true
获得一组。
答案 1 :(得分:0)
使用FirstOrDefault()仅获取第一个元素
ViewBag.Groupddl = new SelectList(groupListItems, "Value", "Text").FirstOrDefault();