具有不同或GroupBy的Linq代码不起作用

时间:2018-10-03 14:24:59

标签: c# list linq drop-down-menu unique

我正在尝试填充列表,因此可以将其放在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();

如何获取它,以便下拉列表仅填充所有唯一值而不会重复?

2 个答案:

答案 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中的GetHashCodeSelectListItem

在第二个代码段中,您没有按组分组,而是按比较w.Group != null得出的布尔值分组。

.GroupBy(w => w.Group != null)

因此,如果它们都不都是空的,则只能通过Key = true获得一组。

答案 1 :(得分:0)

使用FirstOrDefault()仅获取第一个元素

ViewBag.Groupddl = new SelectList(groupListItems, "Value", "Text").FirstOrDefault();