从MVC的下拉列表中删除重复项

时间:2018-10-25 20:01:46

标签: asp.net-mvc entity-framework razor

所以我正在处理一个DropDown列表,它可以工作,但是它有很多重复的电子邮件,我只想查看不同的电子邮件...所以我尝试在模型类中执行.Distinct(),但这仍然给了我重复项。

模型类:

 public string One_Manager_Email{ get; set; }

 public List<Hello> getManagers()
        {
            var que = (from wr in db.View
                       select new Hello
                       {
                           O_Manager_Email= wr.One_Manager_Email
                       }).Distinct().ToList();
            return que;
        }

控制器类:(这可能是发生问题的地方)

    public ActionResult Index()
        {
            test = new Hello();
            ViewBag.Managers = new SelectList(test.getManagers(), "", "O_Manager_Email");
            return View(test.getStuff());
         }

查看课程:

<div>
    @Html.DropDownList("Managers", ViewBag.Managers as SelectList)
</div>

任何帮助都会很棒,谢谢!

3 个答案:

答案 0 :(得分:0)

完全不同的对象无法使用完全不同的对象,因为对象始终是完全不同的,但是您可以尝试在查询中使用分组依据,具体如下:

var que = (from wr in db.View
           group new {wr.One_Manager_Email}
           by new {wr.One_Manager_Email} into grouped
           select new Hello
           {
               O_Manager_Email= grouped.Key.One_Manager_Email
           }).ToList();
return que;

答案 1 :(得分:0)

您需要根据对象的属性对对象进行分组,然后选择分组的第一个元素。

 public List<Hello> getManagers()
        {
            var que = (from wr in db.View
                       select new Hello
                       {
                           O_Manager_Email= wr.One_Manager_Email
                       })
                      .GroupBy(g => g.O_Manager_Email) //group by property
                      .Select(g => g.First()) //take first element from every grouping
                      .ToList();
            return que;
        }

有关更多详细信息,您可以看到这篇文章,其中包含有关分组和区分的更多详细信息:LINQ's Distinct() on a particular property

答案 2 :(得分:0)

如果只需要电子邮件地址,则可以只选择字符串而不是选择Hello对象。如果选择“ Hello对象”并尝试以这种方式区分您,则显然会得到重复的项目。因为每个对象已经是唯一的。

我相信您已经回答了。 GroupBy可能会解决您的问题。但是,除非您确实需要GroupBy,否则不要使用GroupBy!这确实是昂贵的操作。

在这种情况下,您应该使用DistinctBy。

var distinctList = list.DistinctBy(x => x.Prop).ToList();

在您的代码上:

        var que = (from wr in db.View
                   select new Hello
                   {
                       O_Manager_Email = wr.One_Manager_Email
                   }).DistinctBy(x=>x.O_Manager_Email).ToList();

哦,就使用DistinctBy而言,您应该导入Microsoft.Ajax.Utilities的命名空间。

using Microsoft.Ajax.Utilities;